• Spring中,使用Java配置的方式进行依赖注入


    之前用spring的时候,只知道使用xml的方式,和使用注解的方式,却一直不知道在spring中,还可以使用Java类的方式进行配置。使用Java类的方式,就可以取代xml和注解。使用Java配置是Spring4版本的推荐的配置方式,在spring boot中得到了很广泛的应用,也是spring boot推荐的配置方式。

    今天大概学习了一下,怎么使用java配置的方式对spring进行配置来使用以来注入功能。

    首先我们演示使用注解的方式配置spring,注解的一些功能全部以注释的形式展示。Spring容器类选用AnnotationConfigApplicationContext。

    • 功能类1,FunctionService
    package site.wangxin520.springstudy.dependency.injection;
    
    import org.springframework.stereotype.Service;
    
    //使用@service注解声明当前的类,是spring管理的一个Bean
    //可以根据需要,选择@Component @Servie @Repository @Controller
    @Service
    public class FunctionService {
        
        /**
         * 返回一个字符串,在参数字符串前面加入hello,拼成一个新字符串
         * @param word
         * @return
         */
        public String sayHallo(String word){
            return "hello "+word+" !";
        }
        
    }
    • 功能类2,UseFunctionService
    package site.wangxin520.springstudy.dependency.injection;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    @Service
    public class UserFuctionService {
    
        //@Autowired是自动注入的注解,将实例化好的FunctionService类注入到本类中的属性。
        @Autowired
        FunctionService functionService;
        
        public String sayHello(String word){
            return functionService.sayHallo(word);
        }
        
    }
    • 配置类DiConfig
    package site.wangxin520.springstudy.dependency.injection;
    
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    
    /**
     * 配置类
     * @author wangXgnaw
     *
     */
    @Configuration//声明当前类是一个配置类
    @ComponentScan("site.wangxin520.springstudy")//相当于xml中配置到 扫描包
    public class DiConfig {
    
    }
    • Test测试类
    package site.wangxin520.springstudy.dependency.injection;
    
    import org.springframework.context.annotation.AnnotationConfigApplicationContext;
    
    public class Test {
    
        public static void main(String[] args) {
    
            AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(DiConfig.class);
    
            UserFuctionService userFuctionService = context.getBean(UserFuctionService.class);
            String sayHello = userFuctionService.sayHello("小帅哥,快来玩呀");
            System.out.println(sayHello);
            
        }
    
    }
    • 控制台输出为

    image

    完全可以运行,而本例子中,没有配置任何xml文件。


    下面介绍另一种方式,不在类上面使用注解,而直接使用Java配置。

    同样,还是上面的列子,不过在新例子中,去掉了@Service和@AutoWired注解

    • FunctionService功能类1
    package site.wangxin520.springstudy.javaconf;
    
    public class FunctionService {
    
        public String sayHallo(String word){
            return "hello "+word+" !";
        }
    }
    • UserFunctionService功能类2
    package site.wangxin520.springstudy.javaconf;
    
    public class UserFuctionService {
    
        FunctionService functionService;
    
        public void setFunctionService(FunctionService functionService) {
            this.functionService = functionService;
        }
    
        public String sayHello(String word) {
            return functionService.sayHallo(word);
        }
    
    }
    • JavaConfig
    package site.wangxin520.springstudy.javaconf;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration
    //这里注意的是,没有使用包扫描的注解
    public class JavaConfig {
    
        @Bean//使用Bean注解声明当前方法的返回值是一个Bean,名称就是方法名
        public FunctionService functionService(){
            return new FunctionService();
        }
        
        @Bean
        public UserFuctionService  userFuctionService(){
            //当使用userFunctionService时候,就会调用这个里面的方法去获取bean
            UserFuctionService userFuctionService=new UserFuctionService();
            userFuctionService.setFunctionService(functionService());
            return userFuctionService;
            
        }
        
        @Bean//这是另外一种注入的方式,直接使用参数注入的方式
        public UserFuctionService userFuctionService(FunctionService functionService){
            
            UserFuctionService userFuctionService=new UserFuctionService();
            userFuctionService.setFunctionService(functionService());
            return userFuctionService;
            
        }
        
    }
    • Test
    package site.wangxin520.springstudy.javaconf;
    
    import org.springframework.context.annotation.AnnotationConfigApplicationContext;
    
    public class Test {
    
        public static void main(String[] args) {
    
            AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(JavaConfig.class);
    
            UserFuctionService userFuctionService = context.getBean(UserFuctionService.class);
            String sayHello = userFuctionService.sayHello("小帅哥,快来玩呀");
            System.out.println(sayHello);
            
        }
    
    }
    • 控制台输出

    image

    表示,这个还没有xml方便,不喜欢。

  • 相关阅读:
    求一些数字字符参数的和(Java)
    《大道至简》第二章 读后感
    华为机试题 简单错误记录
    华为机试 购物单
    华为机试题 提取不重复的整数
    华为机试题 合并表结构
    华为机试 取近似值
    华为机试题 质数因子
    华为机试题 进制转换
    华为机试题 字符串分割
  • 原文地址:https://www.cnblogs.com/wangxinblog/p/7751211.html
Copyright © 2020-2023  润新知