Spring笔记2

1.  三种实例化bean方法:

    1)使用类构造器实例化

<bean id="personService" class="cn.itcast.service.imp.PersonServiceBean"></bean>
package cn.itcast.service.imp;

import cn.itcast.service.PersonService;

public class PersonServiceBean implements PersonService {
    public void save(){
        System.out.println("我是save方法");
    }
}

    2)使用静态工厂方法实例化,factory-method="createOrder":代表静态方法的方法名

<bean id="personService2" class="cn.itcast.service.imp.PersonServiceBeanFactory" factory-method="createOrder"></bean>
package cn.itcast.service.imp;

public class PersonServiceBeanFactory {
    public static PersonServiceBean createOrder(){
        return new PersonServiceBean();
    }
}

    3)使用实例工厂方法实例化,先配一个bean的工厂类,然后再配bean,应用上一步配置的工厂类

<bean id="personServiceFactory" class="cn.itcast.service.imp.PersonServiceBeanFactory"></bean>
<bean id="personService3" factory-bean="personServiceFactory" factory-method="createOrder2"></bean>
package cn.itcast.service.imp;

public class PersonServiceBeanFactory {
    public static PersonServiceBean createOrder(){
        return new PersonServiceBean();
    }
    public PersonServiceBean createOrder2(){
        return new PersonServiceBean();
    }
}

2.    bean的作用域:

    1)scope="singleton"(默认)每个Spring Ioc容器中一个bean定义只有一个实例对象,默认情况下会在容器启动时初始化bean,但是我们可以指定bean节点的lazy-init="true"来延迟初始化bean,只有第一次获取bean对象才初始化bean。如:

<bean id='personService' class='cn.itcast.service.imp.PersonServiceBean' lazy-init="true"></bean>

如果想对所有bean都应用延迟初始化,可以在根节点beans设置default-lazy-init="true"。

    2)scope="prototype"每次从容器获取bean都是一个新的对象

3.    bean的初始化方法和销毁方法:(先实例化再执行初始化方法,即先执行构造方法,再执行init方法)

<bean id='personService' class='cn.itcast.service.imp.PersonServiceBean'  init-method="init" destroy-method="destory" ></bean>

    调用destory方法用下面的对象:

AbstractApplicationContext ctr = new ClassPathXmlApplicationContext(new String[]{"beans.xml"});
ctr.close();

4.    通过属性set方法注入(在运行期,由外部容器动态的将依赖对象注入到组件中)

    1)对象的注入

package cn.itcast.service.imp;

import cn.itcast.dao.PersonDao;
import cn.itcast.service.PersonService;

public class PersonServiceBean implements PersonService {
    PersonDao personDao;
    
    public PersonDao getPersonDao() {
        return personDao;
    }

    public void setPersonDao(PersonDao personDao) {
        this.personDao = personDao;
    }
    
    public void save(){
        personDao.save();
    }
    
}
<bean id="personDao" class="cn.itcast.dao.imp.PersonDaoImp"></bean>
<bean id="personService" class="cn.itcast.service.imp.PersonServiceBean">
     <property name="personDao" ref="personDao"></property>
</bean>

 或者

<bean id="personService" class="cn.itcast.service.imp.PersonServiceBean">
        <property name="personDao">
            <bean class="cn.itcast.dao.imp.PersonDaoImp"></bean>
        </property>
</bean>

    2)基本数据类型的注入,<property name="name" value="itcast"></property>

    3)集合类型的注入:

Spring的bean配置
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4        xsi:schemaLocation="http://www.springframework.org/schema/beans
 5            http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
 6     <bean id="personDao" class="cn.itcast.dao.imp.PersonDaoImp"></bean>
 7     <bean id="personService" class="cn.itcast.service.imp.PersonServiceBean">
 8          <property name="personDao" ref="personDao"></property>
 9         <property name="sets">
10             <set>
11                 <value>set1</value>
12                 <value>set2</value>
13                 <value>set3</value>
14             </set>
15         </property>
16         <property name="lists">
17             <list>
18                 <value>list1</value>
19                 <value>list2</value>
20                 <value>list3</value>
21             </list>
22         </property>
23         <property name="properties">
24             <props>
25                 <prop key="pro1">prov1</prop>
26                 <prop key="pro2">prov2</prop>
27                 <prop key="pro3">prov3</prop>
28             </props>
29         </property>
30         <property name="maps">
31             <map>
32                 <entry key="map1" value="mapv1"></entry>    
33                 <entry key="map2" value="mapv2"></entry>    
34                 <entry key="map3" value="mapv3"></entry>    
35             </map>
36         </property>
37     </bean>
38 </beans>
注入的组件类
 1 package cn.itcast.service.imp;
 2 
 3 import java.util.ArrayList;
 4 import java.util.HashMap;
 5 import java.util.HashSet;
 6 import java.util.List;
 7 import java.util.Map;
 8 import java.util.Properties;
 9 import java.util.Set;
10 
11 import cn.itcast.dao.PersonDao;
12 import cn.itcast.service.PersonService;
13 
14 public class PersonServiceBean implements PersonService {
15     PersonDao personDao;
16     
17     String name;
18     
19     Set<String> sets = new HashSet<String>();
20     
21     List<String> lists = new ArrayList<String>();
22     
23     Properties properties = new Properties();
24     
25     Map<String,String> maps = new HashMap<String,String>();
26     
27     public Set<String> getSets() {
28         return sets;
29     }
30 
31     public void setSets(Set<String> sets) {
32         this.sets = sets;
33     }
34 
35     public List<String> getLists() {
36         return lists;
37     }
38 
39     public void setLists(List<String> lists) {
40         this.lists = lists;
41     }
42 
43     public Properties getProperties() {
44         return properties;
45     }
46 
47     public void setProperties(Properties properties) {
48         this.properties = properties;
49     }
50 
51     public Map<String, String> getMaps() {
52         return maps;
53     }
54 
55     public void setMaps(Map<String, String> maps) {
56         this.maps = maps;
57     }
58 
59     public String getName() {
60         return name;
61     }
62 
63     public void setName(String name) {
64         this.name = name;
65     }
66 
67     public PersonDao getPersonDao() {
68         return personDao;
69     }
70 
71     public void setPersonDao(PersonDao personDao) {
72         this.personDao = personDao;
73     }
74     
75     public void save(){
76         System.out.println(name);
77         personDao.save();
78     }
79     
80 }
测试类
 1 package junit.test;
 2 
 3 import java.util.Set;
 4 
 5 import org.junit.Test;
 6 import org.springframework.context.ApplicationContext;
 7 import org.springframework.context.support.AbstractApplicationContext;
 8 import org.springframework.context.support.ClassPathXmlApplicationContext;
 9 import org.springframework.context.support.FileSystemXmlApplicationContext;
10 
11 import cn.itcast.service.PersonService;
12 
13 import junit.framework.TestCase;
14 
15 public class SpringTest extends TestCase {
16 
17     @Test
18     public void test1(){
19         AbstractApplicationContext ctr = new ClassPathXmlApplicationContext(new String[]{"beans.xml"});
20         PersonService personService = (PersonService) ctr.getBean("personService");
21         for(String value:personService.getSets()){
22             System.out.println(value);
23         }
24         for(String value:personService.getLists()){
25             System.out.println(value);
26         }
27         for(Object key :personService.getProperties().keySet()){
28             System.out.println(key+"_"+personService.getProperties().getProperty((String) key));
29         }
30         for(Object key :personService.getMaps().keySet()){
31             System.out.println(key+"_"+personService.getMaps().get(key));
32         }
33     }
34 }

 5.    通过构造器的方法注入

Spring的bean配置
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4        xsi:schemaLocation="http://www.springframework.org/schema/beans
 5            http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
 6     <bean id="personDao" class="cn.itcast.dao.imp.PersonDaoImp"></bean>
 7     <bean id="personService" class="cn.itcast.service.imp.PersonServiceBean">
 8          <constructor-arg index="0" type="cn.itcast.dao.PersonDao" ref="personDao"></constructor-arg>
 9          <constructor-arg index="1" value="传智博客"></constructor-arg>
10                  </bean>
11 </beans>
ServiceBean中的构造器
 1 package cn.itcast.service.imp;
 2 
 3 import java.util.ArrayList;
 4 import java.util.HashMap;
 5 import java.util.HashSet;
 6 import java.util.List;
 7 import java.util.Map;
 8 import java.util.Properties;
 9 import java.util.Set;
10 
11 import cn.itcast.dao.PersonDao;
12 import cn.itcast.service.PersonService;
13 
14 public class PersonServiceBean implements PersonService {
15     PersonDao personDao;
16     
17     String name;
18     
19     public PersonServiceBean(PersonDao personDao, String name) {
20         this.personDao = personDao;
21         this.name = name;
22     }
23 
24     public void save(){
25         System.out.println(name);
26         personDao.save();
27     }
28     
29 }
原文地址:https://www.cnblogs.com/fanglove/p/2807312.html