Spring是通过IoC容器对Bean进行管理的,而Bean的初始化主要分为两个过程:Bean的注册和Bean实例化。Bean的注册主要是指Spring通过读取配置文件获取各个bean的声明信息,并且对这些信息进行注册的过程。本文将介绍bean的三种注册方式。
public class User { private String username; private String password; public User() { System.out.println("User类的无参构造方法User()执行了"); } public User(String username, String password) { System.out.println("User类的有参构造方法User()执行了"); this.username = username; this.password = password; } }
<?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="entity.User"></bean> </beans>
public class TestSpring { public static void main(String[] args) { ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); User user = applicationContext.getBean("user", User.class); System.out.println(user); } }
User类的无参构造方法User()执行了 entity.User@29774679
public class User { private String username; private String password; public User() { System.out.println("User类的无参构造方法User()执行了"); } public User(String username, String password) { System.out.println("User类的有参构造方法User()执行了"); this.username = username; this.password = password; } }
public class UserFactory { private static User user; static { user = new User(); } public static User getInstance() { return user; } }
<?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"> <?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"> <!-- factory-method:用于指定一个静态工厂方法,Spring容器会调用这个静态方法创建个对象。--> <bean id="user" class="entity.UserFactory" factory-method="getInstance"></bean> </beans> </beans>
public class TestSpring { public static void main(String[] args) { ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); User user = applicationContext.getBean("user", User.class); System.out.println(user); } }
User类的无参构造方法User()执行了 entity.User@5622fdf
java.util.Calendar public final Date getTime()
<?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 --> <bean id="calendar" class="java.util.Calendar" factory-method="getInstance"></bean> <!-- 实例工厂方法注册bean: factory-bean:用于指定一个bean的id factory-method:用于指定一个方法 --> <bean id="time" factory-bean="calendar" factory-method="getTime"></bean> </beans>
@Test public void test03() { ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); Date time = ac.getBean("time",Date.class); System.out.println(time); }
Mon Jan 21 00:28:07 CST 2019