zoukankan      html  css  js  c++  java
  • spring 注解方式注入

    配置注解

    在xml文件中配置

    <!-- 启动spring注解 -->                                   
    <context:annotation-config/>                          
    <!-- 扫描包 -->                                          
    <context:component-scan base-package="self.exercise"/>

    使用注解

    模拟实际开发中的项目层次结构,分别在UserDaoImpl、UserServiceImpl和UserController中实现注解注入。

    UserDapImpl

    @Component//相当于xml方式中的<bean class="self.exercise.dao.impl.UserDaoImpl" id="userDaoImpl"/>  
    public class UserDaoImpl implements UserDao {                                              
                                                                                               
        @Override                                 
        public void print() {                                                                  
            // TODO Auto-generated method stub                                                 
            System.out.println("userDaoImpl");                                                 
        }                                                                                      
      
    } 

    @Component注解有属性value,可以指定id值,如果不指定,默认的id为类名的首字母小写。

    UserServiceImpl

    @Component("userService") // 相当于xml方式中的<bean class="self.exercise.service.impl.UserServiceImpl" id="userService"></bean>  
    public class UserServiceImpl implements UserService {                                                
                                                                                                         
        UserDao userDao;                                                                                 
        @Resource(name = "userDaoImpl") // 相当于xml方式中的<property name="userDao" ref="userDaoImpl"/>        
        public void setUserDao(UserDao userDao) {                                                        
            this.userDao = userDao;                                                                      
        }                                                                                                
                                                                                                         
        @Override                                                                                        
        public void print() {                                                                            
            System.out.println("userServiceImpl");                                                       
            userDao.print();                                                                             
        }                                                                                                
    }                                                                                                    

    UserServiceImpl中有一个属性userDao,使用setter方式注入。换成构造函数方法注入也可以。

    @Resource注解的匹配原则:如果设置了name值,匹配与name值相同的id;如果id不匹配,如果没有设置name值,匹配与set方法之后部分(UserDao)的首字母小写;如果还未匹配到,匹配与set方法中参数类型相同的。

    UserController

    @Component                                               
    public class UserController {                            
                                                             
        UserService userService;
        //未指定name值,匹配d="userService"的class                             
        @Resource()                                          
        public void setUserService(UserService userService) {
            this.userService = userService;                  
        } 
                                                               
        public void print() {                                
            System.out.println("USerController");            
            userService.print();                             
        }                                                                                                       
    }                                                        

    优化

    UserDaoImpl

    @Repository // 相当于xml方式中的<bean class="self.exercise.dao.impl.UserDaoImpl" id="userDaoImpl"/>  
    public class UserDaoImpl implements UserDao {                                                 
                                                                                                  
        @Override                                                                                 
        public void print() {                                                                     
            System.out.println("userDaoImpl");                                                    
        }                                                                                         
                                                                                                  
    }                                                                                             

    UserServiceImpl

    @Service() // 相当于xml方式中的<bean class="self.exercise.dao.impl.UserDaoImpl" id="userDaoImpl"></bean>  
    public class UserServiceImpl implements UserService {                                              
                                                                                                       
        @Autowired                                                                                     
        @Qualifier(value = "userDaoImpl") // 匹配id                                                      
        UserDao userDao;// 相当于xml方式中的<property name="userDao" ref="userDaoImpl"/>                      
                                                                                                       
        @Override                                                                                      
        public void print() {                                                                          
            System.out.println("userServiceImpl");                                                     
            userDao.print();                                                                           
        }                                                                                              
                                                                                                       
    }                                                                                                  

    去掉了setter或构造函数的注入方式,Autowired会实现自动注入;AutoWired注解没有属性可以用来匹配id,需要用@Qualifier匹配。

    UserController

    @Controller
    @Scope(
    "prototype") public class UserController { @Autowired private UserService userService; public void print() { System.out.println("USerController"); userService.print(); } }

    @Repository、@Service、@Controller都被@Component注解修饰。

  • 相关阅读:
    记第一场省选
    POJ 2083 Fractal 分形
    CodeForces 605A Sorting Railway Cars 思维
    FZU 1896 神奇的魔法数 dp
    FZU 1893 内存管理 模拟
    FZU 1894 志愿者选拔 单调队列
    FZU 1920 Left Mouse Button 简单搜索
    FZU 2086 餐厅点餐
    poj 2299 Ultra-QuickSort 逆序对模版题
    COMP9313 week4a MapReduce
  • 原文地址:https://www.cnblogs.com/qingyaxuan/p/6550662.html
Copyright © 2011-2022 走看看