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

  • 相关阅读:
    pytorch 多gpu训练
    pytorch简单测试
    预处理
    机器学习:模型评估与选择:性能度量——代价敏感错误率与代价曲线
    机器学习:模型评估与选择:性能度量——ROC与AUC
    机器学习:模型评估与选择:性能度量——查准率、查全率与F1
    机器学习:模型评估与选择:评估方法——交叉验证法(筹)
    机器学习:模型评估与选择:评估方法——自助法
    机器学习:模型评估与选择:评估方法——留出法
    机器学习:绪论
  • 原文地址:https://www.cnblogs.com/qingyaxuan/p/6550662.html
Copyright © 2020-2023  润新知