• springboot实战(汪云飞)学习-1-2


    java EE开发的颠覆者 spring boot 实战 随书学习-1

    接上一篇,Java配置的学习(还是上一篇的项目中,添加新的包和代码):

    java配置是spring4.x推荐的配置方式,可以完全替代xml配置,也是springboot推荐的配置方式。Java 配置是通过@Configuration和@Bean来实现的。
    @Configuration 声明当前类是一个配置类 ,通过@ComponentScan 注解自动扫描指定包下的所有使用@Service @Component @Repository 和@Controller的类,将它们注册为spring的Bean

    @Bean注解使用在方法上,声明当前方法的返回值是一个bean,bean的名字为方法名。

    何时使用Java配置呢?主要原则是,全局配置使用Java配置(如数据库相关配置,MVC相关配置),业务bean的配置使用 注解配置(@Service @Component @Repository @Controller )。下面演示一个最简单的java配置的内容

    1. 编写功能类的bean

     1 package com.wisely.highlight_spring4.ch1.javaconfig;
     2 
     3 /**
     4  * 1.定义功能类的bean 不再使用@Service注解声明当前FunctionService类是spring管理的一个bean
     5  * @author Administrator
     6  */
     7  //和上一个示例中的区别,此处没有用@Service声明bean
     8 public class FunctionService {
     9     
    10     public String sayHello(String word) {
    11         return "hello " + word + " !";
    12     }
    13 
    14 }

    2. 使用功能类的bean

     1 package com.wisely.highlight_spring4.ch1.javaconfig;
     2 
     3 /**
     4  * 2.使用功能类FunctionService的bean
     5  * 
     6  * @author Administrator
     7  *
     8  */
     9 //不再使用@Service声明bean
    10 public class UseFunctionService {
    11     //不再使用@Autowired自动注入bean,改为set方法设置functionService
    12     private FunctionService functionService;
    13     
    14     //去掉@Service 和@Autowired注解,添加set方法
    15     public void setFunctionService(FunctionService functionService) {
    16         this.functionService = functionService;
    17     }
    18 
    19     public String sayHello(String word) {
    20         return functionService.sayHello(word);
    21     }
    22 
    23 }

    3.Java配置类编写(重点)

     1 package com.wisely.highlight_spring4.ch1.javaconfig;
     2 
     3 import org.springframework.context.annotation.Bean;
     4 import org.springframework.context.annotation.ComponentScan;
     5 import org.springframework.context.annotation.Configuration;
     6 /**
     7  * 3.spring配置类
     8  * spring4.x推荐使用java配置替代xml配置,通过 @Configuration和 @Bean 两个注解来实现
     9  * @Configuration 声明当前类是一个配置类,相当于一个spring配置的xml文件
    10  * @Bean 注解用在方法上,声明当前方法的返回值为一个Bean
    11  * 何时使用Java配置?:全局配置使用Java配置(如数据库相关配置,MVC相关配置),业务bean的配置使用
    12  * 注解配置(@Service @Component @Repository @Controller)
    13  * @author Administrator
    14  *
    15  */
    16 @Configuration
    17 public class JavaConfig {
    18 
    19     //Bean注解声明当前方法返回值是一个bean,bean的名称是方法名functionService
    20     @Bean
    21     public FunctionService functionService() {
    22         return new FunctionService();
    23     }
    24     
    25     @Bean
    26     public UseFunctionService useFunctionService() {
    27         UseFunctionService useFunctionService = new UseFunctionService();
    28         //直接调用functionService() 注入FunctionService的Bean
    29         useFunctionService.setFunctionService(functionService());//
    30         return useFunctionService;
    31     }
    32     
    33 //    @Bean
    34     //另外一种注入方式:直接将FunctionService作为参数给useFunctionService1().
    35     //spring容器中,只要容器中存在某个Bean,就可以在另外一个Bean的声明方法的参数中注入!!!
    36     /*public UseFunctionService useFunctionService1(FunctionService functionService) {//此处不能也叫useFunctionService,会报错
    37  UseFunctionService useFunctionService = new UseFunctionService(); 38  //直接调用functionService() 注入FunctionService的Bean 39  useFunctionService.setFunctionService(functionService);// 40  return useFunctionService; 41  }*/ 42 43 }

    说明:

    (1).@Configuration注解表明当前类是一个配置类,这意味着这个类里面可能有0个或多个@Bean注解,此处没有使用@ComponentScan注解扫描包,是因为所有的bean都在此类中定义了
    (2).使用@Bean注解声明当前方法,如:public FunctionService functionService() { return new FunctionService(); } 的返回值是一个Bean ,Bean的名称是方法名functionService

    (3). 注入FunctionService 的Bean的时候直接调用functionService()
    (4).另外一种注入的方式,直接将FunctionService 作为参数给useFunctionService(),这也是spring容器提供的一个功能。在spring容器中,只要容器中存在某个bean,就可以在另外一个Bean的声明方法的参数中注入。

    4.测试

     1 package com.wisely.highlight_spring4.ch1.javaconfig;
     2 
     3 import org.springframework.context.annotation.AnnotationConfigApplicationContext;
     4 /**
     5  * 4.测试
     6  * @author Administrator
     7  *
     8  */
     9 public class MainTest {
    10     
    11     public static void main(String[] args) {
    12         //1.使用AnnotationConfigApplicationContext最为spring容器,接受一个配置类作为参数
    13         AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(JavaConfig.class);
    14         //2.获得声明配置的UseFunctionService 的bean
    15         UseFunctionService useFunctionService = context.getBean(UseFunctionService.class);
    16         //3.调用bean的方法
    17         System.out.println(useFunctionService.sayHello("java config"));
    18         context.close();
    19         
    20     
    21     }
    22 
    23 }



  • 相关阅读:
    vue-自定义指令
    vue-自定义过滤器--时间
    vue-jsonp
    vue-post
    vue-get-参数
    vue-get
    vue-百度下拉列表
    C#网页授权获取微信Openid
    C#微信环境分享页面给微信好友、朋友圈
    IIS服务器同时使用多个https证书如何操作443端口
  • 原文地址:https://www.cnblogs.com/enjoyjava/p/9114132.html
Copyright © 2020-2023  润新知