Spring配置——Bean元素以及生成Bean元素的三種方式
阿新 • • 發佈:2019-02-11
Bean元素:使用該元素描述需要Spring容器管理的物件
- class屬性:被管理物件的完整類名。
- name屬性:給被管理的物件起的名字,獲得物件時根據該name獲取物件。(儘量使用)
- id屬性:功能與name屬性一樣,但是不能重複且不能使用特殊字元。(原始)
Spring生成Bean的三種方式
空參構造建立
通過建立顯式空參構造器,驗證通過空參構造建立
User.java package cn.jjs.bean; public class User { public User() { System.out.println("User空參構造器"); } private
Demo.java package cn.jjs.helloSpring; import cn.jjs.bean.User; import
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-3.0.xsd"> <!--name可以隨意取名, 一般見名知意--> <bean name="user" class="cn.jjs.bean.User"></bean> </beans>
結果:
User空參構造器 cn.jjs.bean.User@21ed510d
-
靜態工廠方式
呼叫UserFactory的createUser方法建立名為user1的物件。放入容器。
User.java package cn.jjs.bean; public class User { public User() { System.out.println("User空參構造器"); } private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
UserFactory.java package cn.jjs.b_create; import cn.jjs.bean.User; public class UserFactory { public static User createUser() { System.out.println("靜態工廠建立User"); return new User(); } }
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-3.0.xsd"> <!--name可以隨意取名, 一般見名知意--> <bean name="user1" class="cn.jjs.b_create.UserFactory" factory-method="createUser"></bean> </beans>
Demo.java package cn.jjs.helloSpring; import cn.jjs.bean.User; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Demo { @Test public void Test() { //1. 建立容器物件 ApplicationContext ac = new ClassPathXmlApplicationContext("cn/jjs/b_create/applicationContext.xml"); //2. 向容器"要"user物件 User u = (User) ac.getBean("user1"); //3. 列印物件 System.out.println(u); } @Test public void Test1() { //1. 建立容器物件 ApplicationContext ac = new ClassPathXmlApplicationContext("cn/jjs/bean/applicationContext.xml"); //2. 向容器"要"user物件 User u = (User) ac.getBean("user"); //3. 列印物件 System.out.println(u); } }
結果:
靜態工廠建立User User空參構造器 cn.jjs.bean.User@17d8986
-
例項工廠方式
呼叫UserFactory物件的createUser1方法,建立名為user2的物件,放入容器。
UserFactory.java package cn.jjs.b_create; import cn.jjs.bean.User; public class UserFactory { public User createUser1() { System.out.println("例項工廠建立User"); return new User(); } }
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-3.0.xsd"> <bean name="user2" factory-bean="userFactory" factory-method="createUser1"></bean> <bean name="userFactory" class="cn.jjs.b_create.UserFactory"></bean> </beans>
Demo.java package cn.jjs.helloSpring; import cn.jjs.bean.User; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Demo { @Test public void Test2() { //1. 建立容器物件 ApplicationContext ac = new ClassPathXmlApplicationContext("cn/jjs/b_create/applicationContext.xml"); //2. 向容器"要"user物件 User u = (User) ac.getBean("user2"); //3. 列印物件 System.out.println(u); } }
Bean元素的scope屬性
singleton
預設值,單例物件,被標記為單例的物件在Spring容器中之會有一個例項。
prototype
多例原型,被標記為多例的物件,每次獲得時才會在容器中建立,每次建立都是新的物件。
request
web環境下,物件與request請求生命週期一致。
session
web環境下,物件與session生命週期一致。