淺談Spring入門
Spring入門—反射技術(shù)
無參數(shù)的
Java代碼
- Class.forName(className).newInstance;
 - //有參數(shù)的
 - Class.forName(className).getDeclaredConstructor(String.class).newInstance(“黎明”);
 - //通過反射獲取屬性
 - Introspector.getBeanInfo(Person.class).getPropertyDescriptors()
 - //通過反射機(jī)制修改bean屬性的值
 - Person person=(Person)Class.forName(className).getDeclaredConstructor(String.class).newInstance("黎明");
 - PropertyDescriptor[] ps = Introspector.getBeanInfo(Person.class).getPropertyDescriptors();
 - for(PropertyDescriptor p :ps){
 - System.out.println(p.getName());
 - if(p.getName().equals("name")){
 - Method setter=p.getWriteMethod();
 - if(setter!=null){
 - setter.setAccessible(true);//允許訪問private屬性
 - setter.invoke(person, "小燕子");
 - //通過反射機(jī)制修改bean字段的值
 - Field field=Person.class.getDeclaredField("name");
 - field.setAccessible(true);//允許訪問private字段
 - field.set( person , "sss");
 - Class.forName(className).newInstance;
 - //有參數(shù)的
 - Class.forName(className).getDeclaredConstructor(String.class).newInstance(“黎明”);
 - //通過反射獲取屬性
 - Introspector.getBeanInfo(Person.class).getPropertyDescriptors()
 - //通過反射機(jī)制修改bean屬性的值
 - Person person=(Person)Class.forName(className).getDeclaredConstructor(String.class).newInstance("黎明");
 - PropertyDescriptor[] ps = Introspector.getBeanInfo(Person.class).getPropertyDescriptors();
 - for(PropertyDescriptor p :ps){
 - System.out.println(p.getName());
 - if(p.getName().equals("name")){
 - Method setter=p.getWriteMethod();
 - if(setter!=null){
 - setter.setAccessible(true);//允許訪問private屬性
 - setter.invoke(person, "小燕子");
 - //通過反射機(jī)制修改bean字段的值
 - Field field=Person.class.getDeclaredField("name");
 - field.setAccessible(true);//允許訪問private字段
 - field.set( person , "sss");
 
Spring提供了聲明式的事務(wù)管理
軟件的解耦合,不是硬編碼
Spring 需要的jar
Dist\spring.jar
lib\jakarta-commons\commons-logging.jar
如果使用了切面編程(AOP),還需要下列jar文件
- lib/aspectj/aspectjweaver.jar和aspectjrt.jar
 - lib/cglib/cglib-nodep-2.1_3.jar
 
如果使用了JSR-250中的注解,如@Resource/@PostConstruct/@PreDestroy,還需要下列jar文件
lib\j2ee\common-annotations.jar
配置文件beans.xml
Java代碼
- <?xml version="1.0" encoding="UTF-8"?>
 - t;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-2.5.xsd">
 - <bean id="xx" class="junit.test.Person" lazy-init="true">
 - </bean>
 - t;/beans>
 - <?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-2.5.xsd">
 - <bean id="xx" class="junit.test.Person" lazy-init="true">
 - </bean>
 - </beans>
 
怎么啟動(dòng)spring容器Java代碼
- ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
 - Person s = (Person)context.getBean("xx");
 - ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
 - Person s = (Person)context.getBean("xx");
 
默認(rèn)bean是容器啟動(dòng)時(shí)實(shí)例化,只在容器中創(chuàng)建一次,spring中的對象一直存在容器中,是單例模式 
表 3.4. Bean作用域
作用域       描述 
singleton    在每個(gè)Spring IoC容器中一個(gè)bean定義對應(yīng)一個(gè)對象實(shí)例。 
prototype    一個(gè)bean定義對應(yīng)多個(gè)對象實(shí)例。 
request       在一次HTTP請求中,一個(gè)bean定義對應(yīng)一個(gè)實(shí)例;即每次HTTP請求將會(huì)有各自的bean實(shí)例, 它們依據(jù)某個(gè)bean定義創(chuàng)建而成。該作用域僅在基于web的Spring ApplicationContext情形下有效。 
session        在一個(gè)HTTP Session中,一個(gè)bean定義對應(yīng)一個(gè)實(shí)例。該作用域僅在基于web的Spring ApplicationContext情形下有效。 
global session     在一個(gè)全局的HTTP Session中,一個(gè)bean定義對應(yīng)一個(gè)實(shí)例。典型情況下,僅在使用portlet context的時(shí)候有效。該作用域僅在基于web的Spring ApplicationContext情形下有效。 
Spring入門—利用工廠方法創(chuàng)建bean
Java代碼 
 
- public class PersonFactory {
 - public static Person createPerson(){
 - return new Person();
 - }
 - public Person createPerson2(){
 - return new Person();
 - }
 - public class PersonFactory {
 - public static Person createPerson(){
 - return new Person();
 - }
 - public Person createPerson2(){
 - return new Person();
 - }
 - }
 
Java代碼
- //使用靜態(tài)工廠方法實(shí)例化
 - <bean id="person" class="bean.PersonFactory" factory-method="createPerson"></bean>
 - 使用實(shí)例工廠方法實(shí)例化
 - <bean id="personFactory" class="bean.PersonFactory"></bean>
 - <bean id="person2" factory-bean="personFactory" factory-method="createPerson2"></bean>
 - //使用靜態(tài)工廠方法實(shí)例化
 - <bean id="person" class="bean.PersonFactory" factory-method="createPerson"></bean>
 - 使用實(shí)例工廠方法實(shí)例化
 - <bean id="personFactory" class="bean.PersonFactory"></bean>
 - <bean id="person2" factory-bean="personFactory" factory-method="createPerson2"></bean>
 
Spring入門—依賴注入
Java代碼
- public class Person {
 - private Integer id;
 - private String name="aa";
 - private IDCard idcard;
 - public IDCard getIdcard() {
 - return idcard;
 - }
 - public void setIdcard(IDCard idcard) {
 - this.idcard = idcard;
 - }
 - public Person(String name) {
 - this.name = name;
 - }
 - public Person() {
 - }
 - public Integer getId() {
 - return id;
 - }
 - public void setId(Integer id) {
 - this.id = id;
 - }
 - public String getName() {
 - return name;
 - }
 - public void setName(String name) {
 - this.name = name;
 - }
 - }
 - public class IDCard {
 - private String no;
 - public String getNo() {
 - return no;
 - }
 - public void setNo(String no) {
 - this.no = no;
 - }
 - }
 - public class Person {
 - private Integer id;
 - private String name="aa";
 - private IDCard idcard;
 - public IDCard getIdcard() {
 - return idcard;
 - }
 - public void setIdcard(IDCard idcard) {
 - this.idcard = idcard;
 - }
 - public Person(String name) {
 - this.name = name;
 - }
 - public Person() {
 - }
 - public Integer getId() {
 - return id;
 - }
 - public void setId(Integer id) {
 - this.id = id;
 - }
 - public String getName() {
 - return name;
 - }
 - public void setName(String name) {
 - this.name = name;
 - }
 - }
 - public class IDCard {
 - private String no;
 - public String getNo() {
 - return no;
 - }
 - public void setNo(String no) {
 - this.no = no;
 - }
 - }
 
***種方法 
Java代碼 
- <bean id="xx" class="junit.test.Person" lazy-init="true">
 - <property name="idcard">
 - <bean class="junit.test.IDCard">
 - <property name="no" value="9999"></property>
 - </bean>
 - </property>
 - </bean>
 - <bean id="xx" class="junit.test.Person" lazy-init="true">
 - <property name="idcard">
 - <bean class="junit.test.IDCard">
 - <property name="no" value="9999"></property>
 - </bean>
 - </property>
 - </bean>
 
第二種方法
Java代碼 
    
- <bean id="aa" class="junit.test.IDCard">
 - <property name="no" value="88888888"></property>
 - </bean>
 - <bean id="xx" class="junit.test.Person" lazy-init="true">
 - <property name="idcard" ref="aa">
 - </property>
 - </bean>
 - <bean id="aa" class="junit.test.IDCard">
 - <property name="no" value="88888888"></property>
 - </bean>
 - <bean id="xx" class="junit.test.Person" lazy-init="true">
 - <property name="idcard" ref="aa">
 - </property>
 - </bean>
 
為屬性配置null值
Java代碼 
 
- <property name="name"><null/></property>
 - public class Person {
 - private String name="ss";
 - public Person(){}
 - public Person(String name) {
 - this.name = name;
 - }
 - public String getName() {
 - return name;
 - }
 - public void setName(String name) {
 - this.name = name;
 - }
 - public void say(){
 - System.out.println("我說了");
 - }
 - }
 - <property name="name"><null/></property>
 - public class Person {
 - private String name="ss";
 - public Person(){}
 - public Person(String name) {
 - this.name = name;
 - }
 - public String getName() {
 - return name;
 - }
 - public void setName(String name) {
 - this.name = name;
 - }
 - public void say(){
 - System.out.println("我說了");
 - }
 - }
 
初始化bean執(zhí)行say方法相當(dāng)于測試單元的@BeforeClass
- <bean id="xxx" class="bean.Person" scope="singleton" lazy-init="false" init-method="say">
 
集合依賴注入
Java代碼 
  
- <property name="lists">
 - <list>
 - <value>1111</value>
 - <value>2222</value>
 - <value>3333</value>
 - <value>4444</value>
 - </list>
 - </property>
 - for(String s : p.getLists){
 - System.out.println(s);
 - }
 - <property name="sets">
 - <set>
 - <value>TTT</value>
 - <value>YYY</value>
 - </set>
 - </property>
 - for(String s : p.getSets){
 - System.out.println(s);
 - }
 - <property name="maps">
 - <map>
 - <entry key="key1" value="value1"></entry>
 - <entry key="key2" value="value2"></entry>
 - </map>
 - </property>
 - for(String key : p.getMaps().keySet()){
 - System.out.println(key+"="+ p. getMaps ().get(key));
 - }
 - Properties 是注入
 - <property name="propers">
 - <props>
 - <prop key="proper1">value1</prop>
 - <prop key="proper2">value2</prop>
 - </props>
 - </property>
 - for(Object key : p.getPropers().keySet()){
 - System.out.println(key+"="+ p.getPropers().get(key));
 - }
 
【編輯推薦】















 
 
 
 
 
 
 