本文已参与「新人创作礼」活动,一起开启掘金创作之路。
使用组件扫描,首先需要在xml配置中指定扫描父级package路径<context:component-scan base-1package=“com.aimuti”/>,容器会自动扫描com.aimuti包以及其子包下所有组件,并实例化bean.
指定扫描路径后,并不是该路径下所有组件类都会扫描到容器中,只有在组件类中加入以下注解标记时,才会被扫描到容器中.
细节就不仔细说了,写代码比较与配置开发有什么区别.
applicationContext4.xml
<!-- 开启注解扫描 -->
<context:component-scan base-package="com.aimuti"/>
<!-- 声明properties集合,读取const.properties文件内容 -->
<util:properties id="const" location="classpath:const.properties"/>
const.properties
#max rows in one page
PAGE_SIZE=10
@Component("example")
@Scope("singleton")
public class ExampleBean {
/*
* 使用注解开发:1.开启注解扫描
* 2.在bean上加注解
*/
public ExampleBean() {
System.out.println("实例化ExampleBean:"+this);
}
@PostConstruct
public void init() {
System.out.println("初始化ExampleBean");
}
@PreDestroy
public void destory() {
System.out.println("销毁ExampleBean");
}
public void execute() {
System.out.println("执行execute方法");
}
@Component
public class Programmer implements Serializable{
private Computer computer;
@Autowired
public Programmer(@Qualifier("computer") Computer computer) {
this.computer = computer;
}
public void setComputer(Computer computer) {
this.computer = computer;
}
public Computer getComputer() {
return computer;
}
}
@Component("computer")
public class Computer implements Serializable{
@Value(value="1")
private String CPU;
@Value(value="2")
private String RAM;
@Value(value="3")
private String HDD;
set get方法...
@Component
public class Teacher implements Serializable{
private Computer computer;
@Autowired
public void setComputer(@Qualifier("computer") Computer computer) {
this.computer = computer;
}
public Computer getComputer() {
return computer;
}
}
@Component
public class Student {
@Qualifier("computer")
private Computer computer;
@Autowired
public void setComputer(Computer computer) {
this.computer = computer;
}
public Computer getComputer() {
return computer;
}
}
@Component
public class Manager implements Serializable{
private Computer computer;
@Resource(name="computer")//注入单例对象时,可以省略
public void setComputer(Computer computer) {
this.computer = computer;
}
public Computer getComputer() {
return computer;
}
}
@Component
public class Salesman {
@Resource // 注解的属性注入 (最为常用)
private Computer computer;
public void setComputer(Computer computer) {
this.computer = computer;
}
public Computer getComputer() {
return computer;
}
}
@Component
public class DemoBean {
@Value("zhangsan")
private String name;
@Value("PHP")
private String lang;
@Value("60")
private String score;
@Value("#{const.PAGE_SIZE}")
private int pagesize;
public void execute(){
System.out.println("name:"+name);
System.out.println("lang:"+lang);
System.out.println("score:"+score);
System.out.println("pagesize:"+pagesize);
}
省略set get方法