Spring3的IOC的annotation学习笔记

来源:互联网 发布:转运公司推荐 知乎 编辑:程序博客网 时间:2024/06/10 08:45

以下记录了一个小小的Spring3的annotation的应用笔记。

文件列表:

UserService-interface

UserDao-interface

UserServiceImpl-UserService接口的实现

UserDaoImpl-UserDao接口的实现

User-实体类

package com.niewj.model;public class User {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}}

 

package com.niewj.service;import javax.annotation.Resource;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Scope;import org.springframework.stereotype.Service;import com.niewj.dao.LogDao;import com.niewj.dao.UserDao;import com.niewj.model.User;@Service("userServiceImplementation")// @Component/@Repository/@Controller/@Service@Scope("singleton")// @Scope("prototype")public class UserServiceImpl implements UserService {//  也可以此处声明,也可以在setter处声明。/*    @Autowired    @Qualifier("userDaoImplementation")*/    //@Resource(name="userDaoImplementation")// 不指定的话,他会找setter方法,最后可以会退到,找byType匹配。    private UserDao uuuserDao;        private LogDao logDao;    public UserDao getUuuserDao() {        return uuuserDao;    }    /*    @Autowired// (required=false)    @Qualifier("userDaoImplementation")// id/name     */    @Resource(name="userDaoImplementation")    public void setUuuserDao(UserDao uuuserDao) {        this.uuuserDao = uuuserDao;    }    public LogDao getLogDao() {        return logDao;    }    @Autowired    public void setLogDao(LogDao logDao) {        this.logDao = logDao;    }    @Override    public boolean regist(User user) {        logDao.log();        return uuuserDao.save(user);    }}

 

package com.niewj.dao;import javax.annotation.PostConstruct;import javax.annotation.PreDestroy;import org.springframework.stereotype.Repository;import com.niewj.model.User;/* @Repository/@Controller/@Service都属于@Component,只是为了更明显的标注业务层、控制层、还是Dao层 */@Repository("userDaoImplementation")public class UserDaoImpl implements UserDao {    @PostConstruct// 相当于<bean init-method="init">    public void init(){        System.err.println("实例化DAO后,会马上调用此方法。");    }    @PreDestroy//相当于<bean destroy-method="destroy">    public void destroy(){        System.err.println("销毁DAO之前,会执行此方法。");    }        @Override    public boolean save(User user) {        System.err.println("新增用户:" +user.getName());        return true;    }}

 

package com.niewj.dao;import org.springframework.stereotype.Repository;@Repository("logDao")public class LogDaoImpl implements LogDao {@Overridepublic void log() {System.out.println("Logging......记录在日志............OK");}}

 

package com.niewj;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.niewj.model.User;import com.niewj.service.UserService;import com.niewj.service.UserServiceImpl;public class AnnotationTest {    @Test    public void testIocAnnotation() {        ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");        UserService loginService = ac.getBean("userServiceImplementation", UserServiceImpl.class);                User user = new User();        user.setName("dotjar");        loginService.regist(user);    }}

 

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"><import resource="beans.xml" /></beans>
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"    xmlns:p="http://www.springframework.org/schema/p" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xmlns:tx="http://www.springframework.org/schema/tx"    xmlns:context="http://www.springframework.org/schema/context"    xsi:schemaLocation="http://www.springframework.org/schema/beans     http://www.springframework.org/schema/beans/spring-beans-2.5.xsd     http://www.springframework.org/schema/tx       http://www.springframework.org/schema/tx/spring-tx-2.5.xsd    http://www.springframework.org/schema/context    http://www.springframework.org/schema/context/spring-context-3.2.xsd">        <!-- 开启Annotation支持 如果有context:component-scan可以省去此处声明-->    <!-- <context:annotation-config /> -->        <context:component-scan base-package="com.niewj">    </context:component-scan></beans>

1.UserServiceImpl中的@Service中的字串应该和getBean中的一致;

2.UserDaoImpl中的@Repository中参数应该和UserServiceImpl中Setter方法处的@Autowired@Qualifier("dao参数")一致

3.配置文件中开启注解支持:

    *1.配置文件中开启context命名空间支持:<beans>标记中加入:
        <1>加入【xmlns】:【xmlns:context="http://www.springframework.org/schema/context"】
        <2>加入【xsi:schemaLocation】:
        【http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-3.2.xsd】
   
    *2.配置文件中开启注解支持:
        <context:annotation-config />

    *3.因为有<context:component-scan>所以,  <context:annotation-config />可以省去。

 

小结:

1.

 @Repository/@Controller/@Service都属于@Component,只是为了更明显的标注业务层、控制层、还是Dao层

2.

@Resource(name="userDaoImplementation")// 不指定name的话,他会找setter方法,按照byName找不到,最后可以byType匹配。

3.

 @Autowired // byType自动装配 @Qualifier("userDaoImplementation") //byName,必须有@Autowired同时出现。

 

 

0 0