spring框架学习笔记2:配置详解
簡(jiǎn)單寫一個(gè)類做示例:
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對(duì)象交給spring容器管理 --><!-- Bean元素:使用該元素描述需要spring容器管理的對(duì)象class屬性:被管理對(duì)象的完整類名.name屬性:給被管理的對(duì)象起個(gè)名字.獲得對(duì)象時(shí)根據(jù)該名稱獲得對(duì)象. 可以重復(fù).可以使用特殊字符.id屬性: 與name屬性一模一樣. 名稱不可重復(fù).不能使用特殊字符.結(jié)論: 盡量使用name屬性.--><bean name="user" class="bean.User" ></bean><!-- 導(dǎo)入其他spring配置文件 --><import resource="package/applicationContext.xml"/></beans>?
對(duì)象創(chuàng)建的三種方式:
1.空參構(gòu)造創(chuàng)建(推薦):
<bean name="user" class="bean.User" ></bean>?
2.靜態(tài)工廠方式創(chuàng)建:
package create;import bean.User;public class UserFactory {public static User createUser(){System.out.println("靜態(tài)工廠創(chuàng)建User");return new User();} } <!-- 創(chuàng)建方式2:靜態(tài)工廠創(chuàng)建 調(diào)用UserFactory的createUser方法創(chuàng)建名為user2的對(duì)象.放入容器--><bean name="user2" class="create.UserFactory" factory-method="createUser" ></bean>?
3.實(shí)例工廠方式創(chuàng)建:
package create;import bean.User;public class UserFactory {public User createUser2(){System.out.println("實(shí)例工廠創(chuàng)建User");return new User();}} <!-- 創(chuàng)建方式3:實(shí)例工廠創(chuàng)建 調(diào)用UserFactory對(duì)象的createUser2方法創(chuàng)建名為user3的對(duì)象.放入容器--><bean name="user3" factory-bean="userFactory"factory-method="createUser2" ></bean><bean name="userFactory" class="create.UserFactory" ></bean>?
Bean元素的Scope屬性:
scope:singleton 單例(默認(rèn)):被標(biāo)識(shí)為單例的對(duì)象在Spring容器中只會(huì)創(chuàng)建一個(gè)實(shí)例
scope:prototype 多例:被標(biāo)識(shí)為多例的每次創(chuàng)建都會(huì)是一個(gè)新的對(duì)象
驗(yàn)證單例和多例:
?
@Test//scope:singleton 單例//scope:prototype 多例public void fun4(){//1 創(chuàng)建容器對(duì)象ApplicationContext ac = new ClassPathXmlApplicationContext("create/applicationContext.xml");//2 向容器"要"user對(duì)象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對(duì)象 System.out.println(u);}?
使用場(chǎng)景:基本都是使用默認(rèn)單例
但是,整合Struts2框架的時(shí)候,Action要配成多例,因?yàn)镾truts2框架每次請(qǐng)求都會(huì)創(chuàng)建一個(gè)新的Action對(duì)象
?
?
生命周期屬性(初始化,銷毀):
添加方法:
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>測(cè)試:
@Test//測(cè)試生命周期方法public void fun5(){//1 創(chuàng)建容器對(duì)象ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("create/applicationContext.xml");//2 向容器"要"user對(duì)象User u = (User) ac.getBean("user");//3 打印user對(duì)象 System.out.println(u);//關(guān)閉容器,觸發(fā)銷毀方法 ac.close();}?
?
?
Spring屬性注入:
1.set方法注入(推薦):
再創(chuàng)建一個(gè)實(shí)體類做示例:
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對(duì)象中名為name的屬性注入tom作為值 --><property name="name" value="tom"></property><property name="age" value="18"></property><!-- 引用類型注入: 為car屬性注入下方配置的car對(duì)象 --><property name="car" ref="car"></property></bean><!-- 將car對(duì)象配置到容器中 --><bean name="car" class="bean.Car"><property name="name" value="蘭博基尼"></property><property name="color" value="黃色"></property></bean>測(cè)試:
@Testpublic void fun1(){//1 創(chuàng)建容器對(duì)象ApplicationContext ac = new ClassPathXmlApplicationContext("injection/applicationContext.xml");//2 向容器"要"user對(duì)象User u = (User) ac.getBean("user");//3 打印user對(duì)象 System.out.println(u);}?
構(gòu)造函數(shù)注入:
給User加上構(gòu)造方法:
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屬性: 構(gòu)造函數(shù)的參數(shù)名 --><!-- index屬性: 構(gòu)造函數(shù)的參數(shù)索引 --><!-- type屬性: 構(gòu)造函數(shù)的參數(shù)類型 --><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>?
復(fù)雜類型注入:
package injection;import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Properties;public class CollectionBean {private Object[] arr;//數(shù)組類型注入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?
配置文化:
<!-- 復(fù)雜類型注入 --><bean name="cb" class="injection.CollectionBean"><!-- 如果數(shù)組中只準(zhǔn)備注入一個(gè)值(對(duì)象),直接使用value|ref即可 <property name="arr" value="tom"></property> --><!-- array注入,多個(gè)元素注入 --><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>?
轉(zhuǎn)載于:https://www.cnblogs.com/xuyiqing/p/8462286.html
總結(jié)
以上是生活随笔為你收集整理的spring框架学习笔记2:配置详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Dubbo详解-说明(一)
- 下一篇: 配置IISExpress允许外部访问