bean实例化有三种方式
1、使用无参数构造创建(重点)
User.java
package work.zhangdoudou.ico;
public class User {
public void add(){
System.out.println("add······");
}
}
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 无参数构造创建 -->
<bean id="user" class="work.zhangdoudou.ico.User"></bean>
</beans>
TestUser.java
package work.zhangdoudou.test;
import static org.junit.Assert.*;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import work.zhangdoudou.ico.User;
public class TestUser {
@Test
public void test() {
//1加载配置文件,根据创建对象
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
//2得到创建的对象
User user=(User) context.getBean("user");
user.add();
System.out.println(user);
}
}
运行结果
image.png
- 类不写构造默认无参构造
- 写了有参数构造,无参数构造被覆盖,必须手动重写
- 类里面没有无参构造,会出现异常
2、使用静态工厂创建
- 创建静态方法,返回类对象
user2.java
package work.zhangdoudou.ico;
public class User2 {
private String username;
public User2(){
}
public User2(String username) {
this.username = username;
}
public void add(){
System.out.println("user2······");
}
}
静态工厂类Bean2Factory .java
package work.zhangdoudou.BeanFactory;
import org.springframework.context.annotation.Bean;
import work.zhangdoudou.ico.User2;
public class Bean2Factory {
//静态方法返回Bean2对象
public static User2 getBean2(){
return new User2();
}
}
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 使用静态工厂创建bean2 -->
<bean id="user2" class="work.zhangdoudou.BeanFactory.Bean2Factory" factory-method="getBean2" ></bean>
</beans>
TestUser2.java
package work.zhangdoudou.test;
import static org.junit.Assert.*;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import work.zhangdoudou.ico.User;
import work.zhangdoudou.ico.User2;
public class TestUser2 {
@Test
public void test() {
//1加载配置文件,根据创建对象
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
//2得到创建的对象
User2 user2=(User2) context.getBean("user2");
user2.add();
System.out.println(user2);
}
}
运行结果
image.png
3、使用实例工厂创建
- 创建不是静态的方法,返回类对象
User3.java
package work.zhangdoudou.ico;
public class User3 {
private String username;
public User3(){
}
public User3(String username) {
this.username = username;
}
public void add(){
System.out.println("user3······");
}
}
user3的实例工厂 Bean3Factory.java
package work.zhangdoudou.BeanFactory;
import org.springframework.context.annotation.Bean;
import work.zhangdoudou.ico.User3;
public class Bean3Factory {
//普通的方法, 返回Bean3对象
public User3 getBean3(){
return new User3();
}
}
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 实例工厂创建对象 -->
<!-- 创建工厂对象 -->
<bean id="bean3Factory" class="work.zhangdoudou.BeanFactory.Bean3Factory"></bean>
<bean id="user3" factory-bean="bean3Factory" factory-method="getBean3"></bean>
</beans>
TestUser3.java
package work.zhangdoudou.test;
import static org.junit.Assert.*;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import work.zhangdoudou.ico.User3;
public class TestUser3 {
@Test
public void test() {
//1加载配置文件,根据创建对象
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
//2得到创建的对象
User3 user3=(User3) context.getBean("user3");
user3.add();
System.out.println(user3);
}
}
运行结果
image.png
网友评论