spring框架学习笔记2:配置详解
生活随笔
收集整理的這篇文章主要介紹了
spring框架学习笔记2:配置详解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
簡單寫一個類做示例:
package bean;public class User {private String name;private Integer age;public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;} } View Code?
Bean元素:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd "><!-- 將User對象交給spring容器管理 --><!-- Bean元素:使用該元素描述需要spring容器管理的對象class屬性:被管理對象的完整類名.name屬性:給被管理的對象起個名字.獲得對象時根據該名稱獲得對象. 可以重復.可以使用特殊字符.id屬性: 與name屬性一模一樣. 名稱不可重復.不能使用特殊字符.結論: 盡量使用name屬性.--><bean name="user" class="bean.User" ></bean><!-- 導入其他spring配置文件 --><import resource="package/applicationContext.xml"/></beans>?
對象創建的三種方式:
1.空參構造創建(推薦):
<bean name="user" class="bean.User" ></bean>?
2.靜態工廠方式創建:
package create;import bean.User;public class UserFactory {public static User createUser(){System.out.println("靜態工廠創建User");return new User();} } <!-- 創建方式2:靜態工廠創建 調用UserFactory的createUser方法創建名為user2的對象.放入容器--><bean name="user2" class="create.UserFactory" factory-method="createUser" ></bean>?
3.實例工廠方式創建:
package create;import bean.User;public class UserFactory {public User createUser2(){System.out.println("實例工廠創建User");return new User();}} <!-- 創建方式3:實例工廠創建 調用UserFactory對象的createUser2方法創建名為user3的對象.放入容器--><bean name="user3" factory-bean="userFactory"factory-method="createUser2" ></bean><bean name="userFactory" class="create.UserFactory" ></bean>?
Bean元素的Scope屬性:
scope:singleton 單例(默認):被標識為單例的對象在Spring容器中只會創建一個實例
scope:prototype 多例:被標識為多例的每次創建都會是一個新的對象
驗證單例和多例:
?
@Test//scope:singleton 單例//scope:prototype 多例public void fun4(){//1 創建容器對象ApplicationContext ac = new ClassPathXmlApplicationContext("create/applicationContext.xml");//2 向容器"要"user對象User u1 = (User) ac.getBean("user");User u2 = (User) ac.getBean("user");User u3 = (User) ac.getBean("user");User u4 = (User) ac.getBean("user");System.out.println(u2==u4);//單例:true//多例:false//3 打印user對象 System.out.println(u);}?
使用場景:基本都是使用默認單例
但是,整合Struts2框架的時候,Action要配成多例,因為Struts2框架每次請求都會創建一個新的Action對象
?
?
生命周期屬性(初始化,銷毀):
添加方法:
package bean;public class User {private String name;private Integer age;public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public void init(){System.out.println("初始化方法!");}public void destory(){System.out.println("銷毀方法!");}} View Code配置文件:
<bean name="user" class="bean.User"init-method="init" destroy-method="destory" ></bean>測試:
@Test//測試生命周期方法public void fun5(){//1 創建容器對象ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("create/applicationContext.xml");//2 向容器"要"user對象User u = (User) ac.getBean("user");//3 打印user對象 System.out.println(u);//關閉容器,觸發銷毀方法 ac.close();}?
?
?
Spring屬性注入:
1.set方法注入(推薦):
再創建一個實體類做示例:
package bean;public class Car {private String name;private String color;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getColor() {return color;}public void setColor(String color) {this.color = color;}@Overridepublic String toString() {return "Car [name=" + name + ", color=" + color + "]";}} View Code修改User類:
package bean;public class User {private String name;private Integer age;private Car car;public Car getCar() {return car;}public void setCar(Car car) {this.car = car;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public void init(){System.out.println("我是初始化方法!");}public void destory(){System.out.println("我是銷毀方法!");}@Overridepublic String toString() {return "User [name=" + name + ", age=" + age + ", car=" + car + "]";}} View Code?
配置文件:
<!-- set方式注入: --><bean name="user" class="bean.User"><!--值類型注入: 為User對象中名為name的屬性注入tom作為值 --><property name="name" value="tom"></property><property name="age" value="18"></property><!-- 引用類型注入: 為car屬性注入下方配置的car對象 --><property name="car" ref="car"></property></bean><!-- 將car對象配置到容器中 --><bean name="car" class="bean.Car"><property name="name" value="蘭博基尼"></property><property name="color" value="黃色"></property></bean>測試:
@Testpublic void fun1(){//1 創建容器對象ApplicationContext ac = new ClassPathXmlApplicationContext("injection/applicationContext.xml");//2 向容器"要"user對象User u = (User) ac.getBean("user");//3 打印user對象 System.out.println(u);}?
構造函數注入:
給User加上構造方法:
package bean;public class User {private String name;private Integer age;private Car car;public User(String name, Car car) {System.out.println("User(String name, Car car)!!");this.name = name;this.car = car;}public User(Car car,String name) {System.out.println("User(Car car,String name)!!");this.name = name;this.car = car;}public User(Integer name, Car car) {System.out.println("User(Integer name, Car car)!!");this.name = name+"";this.car = car;}public Car getCar() {return car;}public void setCar(Car car) {this.car = car;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public void init(){System.out.println("我是初始化方法!");}public void destory(){System.out.println("我是銷毀方法!");}@Overridepublic String toString() {return "User [name=" + name + ", age=" + age + ", car=" + car + "]";}} View Code配置文件:
<bean name="user2" class="bean.User"><!-- name屬性: 構造函數的參數名 --><!-- index屬性: 構造函數的參數索引 --><!-- type屬性: 構造函數的參數類型 --><constructor-arg name="name" index="0" type="java.lang.Integer" value="66"></constructor-arg><constructor-arg name="car" ref="car" index="1"></constructor-arg></bean>?
復雜類型注入:
package injection;import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Properties;public class CollectionBean {private Object[] arr;//數組類型注入private List list;//list/set 類型注入private Map map;//map類型注入private Properties prop;//properties類型注入public Object[] getArr() {return arr;}public void setArr(Object[] arr) {this.arr = arr;}public List getList() {return list;}public void setList(List list) {this.list = list;}public Map getMap() {return map;}public void setMap(Map map) {this.map = map;}public Properties getProp() {return prop;}public void setProp(Properties prop) {this.prop = prop;}@Overridepublic String toString() {return "CollectionBean [arr=" + Arrays.toString(arr) + ", list=" + list + ", map=" + map + ", prop=" + prop+ "]";}} View Code?
配置文化:
<!-- 復雜類型注入 --><bean name="cb" class="injection.CollectionBean"><!-- 如果數組中只準備注入一個值(對象),直接使用value|ref即可 <property name="arr" value="tom"></property> --><!-- array注入,多個元素注入 --><property name="arr"><array><value>tom</value><value>jerry</value><ref bean="user" /></array></property><property name="list"><list><value>jack</value><value>rose</value><ref bean="user" /></list></property><!-- map類型注入 --><property name="map"><map><entry key="url" value="jdbc:mysql:///mybase"></entry><entry key="user" value-ref="root"></entry><entry key-ref="user" value-ref="user1"></entry></map></property><!-- prperties 類型注入 --><property name="prop"><props><prop key="driverClass">com.jdbc.mysql.Driver</prop><prop key="userName">root</prop><prop key="password">1234</prop></props></property></bean>?
轉載于:https://www.cnblogs.com/xuyiqing/p/8462286.html
總結
以上是生活随笔為你收集整理的spring框架学习笔记2:配置详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Dubbo详解-说明(一)
- 下一篇: 配置IISExpress允许外部访问