目录
1. 使用无参构造创建对象
2. 使用有参构造创建对象
3. 带有类类型属性的构造器创建对象
4. 使用Set方法传递参数
5. 集合, 数组的参数传递
6. 注解的使用
6.1 类注解的使用
6.1 @Value注解的使用
6.2 类类型属性注解的使用
6.3 单例多例注解的使用
6.4 @PostConstruct和@PreDestroy注解的使用
6.5 通过字节码获取对象
类目录结构
public class Cpu {
private Integer num;
private String cpuName;
private String factory;
public Cpu() {
}
public Cpu(Integer num, String cpuName, String factory) {
this.num = num;
this.cpuName = cpuName;
this.factory = factory;
}
public void setNum(Integer num) {
this.num = num;
}
public void setCpuName(String cpuName) {
this.cpuName = cpuName;
}
public void setFactory(String factory) {
this.factory = factory;
}
@Override
public String toString() {
return "Cpu{" +
"num=" + num +
", cpuName='" + cpuName + ''' +
", factory='" + factory + ''' +
'}';
}
}
public class Computer {
private Integer num;
private String computerName;
private Cpu cpu;
public Computer() {
}
public Computer(Integer num, String computerName, Cpu cpu) {
this.num = num;
this.computerName = computerName;
this.cpu = cpu;
}
public void setNum(Integer num) {
this.num = num;
}
public void setComputerName(String computerName) {
this.computerName = computerName;
}
public void setCpu(Cpu cpu) {
this.cpu = cpu;
}
@Override
public String toString() {
return "Computer{" +
"num=" + num +
", computerName='" + computerName + ''' +
", cpu=" + cpu +
'}';
}
}
public class SuperComputer {
private String[] computerNames;
private List factorys;
private Set cpus;
private Map users;
private Properties userGirls;
public void setComputerNames(String[] computerNames) {
this.computerNames = computerNames;
}
public void setFactorys(List factorys) {
this.factorys = factorys;
}
public void setCpus(Set cpus) {
this.cpus = cpus;
}
public void setUsers(Map users) {
this.users = users;
}
public void setUserGirls(Properties userGirls) {
this.userGirls = userGirls;
}
@Override
public String toString() {
return "SuperComputer{" +
"computerNames=" + Arrays.toString(computerNames) +
", factorys=" + factorys +
", cpus=" + cpus +
", users=" + users +
", userGirls=" + userGirls +
'}';
}
}
1. 使用无参构造创建对象
在xml文件中加入
@Test
public void cpuTest(){
ApplicationContext context =
new ClassPathXmlApplicationContext("spring_bean.xml");
Cpu bean1 = (Cpu) context.getBean("cpu");
System.out.println(bean1);
}
2. 使用有参构造创建对象
@Test
public void cpuTest(){
ApplicationContext context =
new ClassPathXmlApplicationContext("spring_bean.xml");
Cpu bean1 = (Cpu) context.getBean("cpu");
System.out.println(bean1);
}
3. 带有类类型属性的构造器创建对象
@Test
public void cpuTest(){
ApplicationContext context =
new ClassPathXmlApplicationContext("spring_bean.xml");
Computer computer = (Computer) context.getBean("computer");
System.out.println(computer);
}
4. 使用Set方法传递参数
@Test
public void cpuTest(){
ApplicationContext context =
new ClassPathXmlApplicationContext("spring_bean.xml");
Computer computer1 = (Computer) context.getBean("computer1");
System.out.println(computer1);
}
5. 集合, 数组的参数传递
@Test
public void cpuTest(){
ApplicationContext context =
new ClassPathXmlApplicationContext("spring_bean.xml");
SuperComputer superComputer = (SuperComputer) context.getBean("superComputer");
System.out.println(superComputer);
}
MacPro
外星人
因特尔工厂
苹果工厂
貂蝉
西施
6. 注解的使用
6.1 类注解的使用
@Component
@Service 业务层
@Controller 表现层
@Repository 持久层
//@Component(value = "cpu")
@Component //默认id: 类名首字母小写
//@Service(value = "cpu")
//@Service
//@Controller(value = "cpu")
//@Controller
//@Repository(value = "cpu")
//@Repository
public class Cpu {
private Integer num;
private String cpuName;
private String factory;
//...此处省略(与上方对应类代码相同)
}
@Test
public void Test02(){
ApplicationContext context =
new ClassPathXmlApplicationContext("spring_bean.xml");
//注解的使用
Cpu bean = (Cpu) context.getBean("cpu");
System.out.println(bean);
}
@Component
@Service 业务层
@Controller 表现层
@Repository 持久层
//@Component(value = "cpu")
@Component //默认id: 类名首字母小写
//@Service(value = "cpu")
//@Service
//@Controller(value = "cpu")
//@Controller
//@Repository(value = "cpu")
//@Repository
public class Cpu {
private Integer num;
private String cpuName;
private String factory;
//...此处省略(与上方对应类代码相同)
}
@Test
public void Test02(){
ApplicationContext context =
new ClassPathXmlApplicationContext("spring_bean.xml");
//注解的使用
Cpu bean = (Cpu) context.getBean("cpu");
System.out.println(bean);
}
6.1 @Value注解的使用
@Component //默认id: 类名首字母小写
public class Cpu {
@Value("666")
private Integer num;
@Value("因特尔")
private String cpuName;
@Value("InterFactory")
private String factory;
//....此处省略(与上面代码一样)
}
6.2 类类型属性注解的使用
@Autowired
@Qualifier(value = "cpu")
@Resource(name = "cpu")
@Component
public class Computer {
private Integer num;
private String computerName;
@Autowired
@Qualifier(value = "cpu")
//@Resource(name = "cpu")
private Cpu cpu;
//...此处省略(与上方对应类代码相同)
}
@Autowired @Qualifier(value = "cpu") @Resource(name = "cpu")
6.3 单例多例注解的使用
@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON) //单例
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE) //多例
public class Computer {
......
}
6.4 @PostConstruct和@PreDestroy注解的使用
@Component
public class Computer {
private Integer num;
private String computerName;
@Autowired
@Qualifier(value = "cpu")
private Cpu cpu;
//...此处省略(与上方对应类代码相同)
//创建容器时调用
@PostConstruct
public void initMethod(){
System.out.println("容器被创建!");
}
//销毁容器时调用
@PreDestroy
public void destroyMethod(){
System.out.println("容器被销毁!");
}
}
@Test
public void Test02(){
ApplicationContext context =
new ClassPathXmlApplicationContext("spring_bean.xml");
((ClassPathXmlApplicationContext)context).close();
}
@Component
public class Computer {
private Integer num;
private String computerName;
@Autowired
@Qualifier(value = "cpu")
private Cpu cpu;
//...此处省略(与上方对应类代码相同)
//创建容器时调用
@PostConstruct
public void initMethod(){
System.out.println("容器被创建!");
}
//销毁容器时调用
@PreDestroy
public void destroyMethod(){
System.out.println("容器被销毁!");
}
}
@Test
public void Test02(){
ApplicationContext context =
new ClassPathXmlApplicationContext("spring_bean.xml");
((ClassPathXmlApplicationContext)context).close();
}
单例模式下:



