Spring笔记(二)

一、装配集合类型的属性:

1.Set:

1.<bean id="userService" class="com.szy.spring.service.UserServiceImpl">  
2.        <property name="sets">  
3.            <set>  
4.                <value>Set1</value>  
5.                <value>Set2</value>  
6.                <value>Set3</value>  
7.            </set>      
8.        </property>  
9.  
10.</bean> 

2.List:

1.<bean id="userService"  class="com.szy.spring.service.UserServiceImpl">  
2.<property name="lists">  
3.            <list>  
4.                <value>List1</value>  
5.                <value>List2</value>  
6.                <value>List3</value>  
7.            </list>  
8.        </property>  
9.    </bean>  

3.Properties:

1.private Properties properties=new Properties();  
2.public void setProperties(Properties properties)  
3.    {  
4.        this.properties = properties;  
5.    }  
6.public Properties getProperties()  
7.    {  
8.        return properties;  
9.    }  
10.public Properties showProperties()  
11.    {  
12.        return properties;  
13.    }  
1.  <bean id="userService" class="com.szy.spring.service.UserServiceImpl">  
2.    <property name="properties">  
3.            <props>  
4.                <prop key="key1">Properties1</prop>  
5.                <prop key="key2">Properties2</prop>  
6.                <prop key="key3">Properties3</prop>  
7.            </props>  
8.        </property>  
9.    </bean>  

4.Map:

1.<bean id="userService" class="com.szy.spring.service.UserServiceImpl">  
2.  <property name="maps">  
3.        <map>  
4.            <entry key="key1" value="Map1"></entry>  
5.            <entry key="key2" value="Map2"></entry>  
6.            <entry key="key3" value="Map3"></entry>  
7.        </map>  
8.    </property>  
9.</bean>  

二、属性注入的方式:

1.setter方法;

2.构造器;

3.注解。

setter方法:使用属性setter方法注入就是给属性添加set()方法,在前面都是使用这种方法。

构造器注入:使用构造器注入就是在类中添加含参构造函数。

1.package com.szy.spring.service;  
2.  
3.import com.szy.spring.dao.PersonDao;  
4.  
5.public class UserServiceImplConstructor implements UserService  
6.{  
7.    private PersonDao personDao;  
8.    private String name;  
9.      
10.    public UserServiceImplConstructor()  
11.    {  
12.    }  
13.  
14.    public UserServiceImplConstructor(PersonDao personDao, String name)  
15.    {  
16.        this.personDao = personDao;  
17.        this.name = name;  
18.    }  
19.  
20.    public void show()  
21.    {  
22.        personDao.show();  
23.        System.out.println("name属性:"+name);  
24.    }  
25.}  
1.<bean id="personDao" class="com.szy.spring.dao.PersonDaoBean"/>  
2.    <!-- 使用构造器参数方法注入配置 -->  
3.    <bean id="userService2" class="com.szy.spring.service.UserServiceImplConstructor">  
4.        <constructor-arg index="0" type="com.szy.spring.dao.PersonDao" ref="personDao"/>  
5.        <constructor-arg index="1" value="Kuka"/>  
6.    </bean> 
constructor-arg index从0开始。

注解方式注入:
1.使用javax.annotation.Resource中提供的注解方式方法
注意添加配置信息:<context:annotation-config/>

1.package com.szy.spring.service;  
2.  
3.import javax.annotation.Resource;  
4.  
5.import com.szy.spring.dao.PersonDao;  
6.  
7.public class UserServiceImplByAnnotation4Resource implements UserService  
8.{  
9.    //@Resource默认是按照名称装配,找不到与名称匹配的bean时按类型装配  
10.    @Resource(name="personDao")private PersonDao personDao;  
11.  
12.    public void show()  
13.    {  
14.        personDao.show();  
15.    }  
16.//  下面方法同样可以  
17.//  @Resource  
18.//  public void setPersonDao(PersonDao personDao)  
19.//  {  
20.//      this.personDao = personDao;  
21.//  }  
22.      
23.}

1   <context:annotation-config/>  
2     <bean id="personDao" class="com.szy.spring.dao.PersonDaoBean"/>  
3     <bean id="userService" class="com.szy.spring.service.UserServiceImplByAnnotation4Autowired">  
4    </bean>  

2.第二中方式就是使用spring提供的注解方式

注入使用时需要导入common-annotations.jar这个包。

1.package com.szy.spring.service;  
2.  
3.import org.springframework.beans.factory.annotation.Autowired;  
4.import org.springframework.beans.factory.annotation.Qualifier;  
5.  
6.import com.szy.spring.dao.PersonDao;  
7.  
8.public class UserServiceImplByAnnotation4Autowired implements UserService  
9.{  
10.    //@Autowired默认使用类型进行装配,  
11.    @Autowired private PersonDao personDao;  
12.//  如果使用按名称进行装配,则需要如下  
13.//  @Autowired @Qualifier("personDao")private PersonDao personDao;  
14.    public void show()  
15.    {  
16.        personDao.show();  
17.    }  
18.      
19.}  

三、让Spring自动扫描和管理Bean:

Spring2.5为我们引入了组件自动扫描机制,它可以在类路径下寻找标记了@Component@Service@Controller@Repository注解的类,

并把这些类纳入到spring容器中管理,它的作用和在xml中使用bean节点配置组件一样。

<context:component-scan base-package="com.imooc"></context:component-scan> 
base-package为需要扫描的包。
@Service用于标注业务层的组件,@Controller用于标注控制层组件(如struts中的action),@Repository用于标注数据访问组件,即DAO组件,而@Component泛指组件,
当组件不好归类的时候,我们可以使用这个注解进行标注。

1 package com.imooc.myinterface;
2 
3 public interface UserDao  {
4     void show();
5 }

 1 package com.imooc.impl;
 2 
 3 import com.imooc.myinterface.UserDao;
 4 import org.springframework.stereotype.Repository;
 5 
 6 @Repository
 7 public class UserDao4MysqlImpl implements UserDao {
 8     @Override
 9     public void show() {
10         System.out.println("UserDao4MysqlImpl");
11     }
12 }
 1 package com.imooc.impl;
 2 
 3 import com.imooc.myinterface.UserDao;
 4 import com.imooc.myinterface.UserService;
 5 import org.springframework.stereotype.Service;
 6 
 7 import java.util.HashSet;
 8 import java.util.Set;
 9 
10 @Service("userServiceImpl")
11 public class UserServiceImpl implements UserService {
12 
13     private UserDao userDao;
14 
15     @Override
16     public void show() {
17         userDao.show();
18     }
19 
20     public void setUserDao(UserDao userDao) {
21         this.userDao = userDao;
22     }
23 
24 
25 }
1 @Test
2     public void testUserService(){
3         ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
4         UserService userService = (UserService) context.getBean("userServiceImpl");
5         System.out.println(userService);
6 
7     }

结果:

 1 com.imooc.impl.UserServiceImpl@1311cccd 

在Spring默认的id是类的名称,开头小写;也可自己命名@Service(“名字”);

若每次调用都想产生一个实例@Service("名字") @Scope("prototype")

配置初始化、销毁方法:@PostConstruct、@PreDestory




posted @ 2016-08-30 10:29  重重的博客园  阅读(175)  评论(0编辑  收藏  举报