• 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注解修饰。

  • 相关阅读:
    Hadoop之HDFS中HA的搭建
    HBase详细介绍
    HBase简介
    MapReduce工作原理介绍
    springMVC中的form:标签使用
    自定义fns
    db2数据建邦联-相当于Oracle数据库的dblink
    Oracle和db2数据库基础操作
    Linux学习之添加用户
    AMPQ 0-9-1学习笔记
  • 原文地址:https://www.cnblogs.com/qingyaxuan/p/6550662.html
Copyright © 2020-2023  润新知