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

 package com.wisely.highlight_spring4.ch1.javaconfig;

 /**
* 1.定义功能类的bean 不再使用@Service注解声明当前FunctionService类是spring管理的一个bean
* @author Administrator
*/
//和上一个示例中的区别,此处没有用@Service声明bean
public class FunctionService { public String sayHello(String word) {
return "hello " + word + " !";
} }

2. 使用功能类的bean

 package com.wisely.highlight_spring4.ch1.javaconfig;

 /**
* 2.使用功能类FunctionService的bean
*
* @author Administrator
*
*/
//不再使用@Service声明bean
public class UseFunctionService {
//不再使用@Autowired自动注入bean,改为set方法设置functionService
private FunctionService functionService; //去掉@Service 和@Autowired注解,添加set方法
public void setFunctionService(FunctionService functionService) {
this.functionService = functionService;
} public String sayHello(String word) {
return functionService.sayHello(word);
} }

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

 package com.wisely.highlight_spring4.ch1.javaconfig;

 import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
/**
* 3.spring配置类
* spring4.x推荐使用java配置替代xml配置,通过 @Configuration和 @Bean 两个注解来实现
* @Configuration 声明当前类是一个配置类,相当于一个spring配置的xml文件
* @Bean 注解用在方法上,声明当前方法的返回值为一个Bean
* 何时使用Java配置?:全局配置使用Java配置(如数据库相关配置,MVC相关配置),业务bean的配置使用
* 注解配置(@Service @Component @Repository @Controller)
* @author Administrator
*
*/
@Configuration
public class JavaConfig { //Bean注解声明当前方法返回值是一个bean,bean的名称是方法名functionService
@Bean
public FunctionService functionService() {
return new FunctionService();
} @Bean
public UseFunctionService useFunctionService() {
UseFunctionService useFunctionService = new UseFunctionService();
//直接调用functionService() 注入FunctionService的Bean
useFunctionService.setFunctionService(functionService());//
return useFunctionService;
} // @Bean
//另外一种注入方式:直接将FunctionService作为参数给useFunctionService1().
//spring容器中,只要容器中存在某个Bean,就可以在另外一个Bean的声明方法的参数中注入!!!
/*public UseFunctionService useFunctionService1(FunctionService functionService) {//此处不能也叫useFunctionService,会报错
  UseFunctionService useFunctionService = new UseFunctionService();   //直接调用functionService() 注入FunctionService的Bean   useFunctionService.setFunctionService(functionService);//   return useFunctionService;   }*/   }

说明:

(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.测试

 package com.wisely.highlight_spring4.ch1.javaconfig;

 import org.springframework.context.annotation.AnnotationConfigApplicationContext;
/**
* 4.测试
* @author Administrator
*
*/
public class MainTest { public static void main(String[] args) {
//1.使用AnnotationConfigApplicationContext最为spring容器,接受一个配置类作为参数
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(JavaConfig.class);
//2.获得声明配置的UseFunctionService 的bean
UseFunctionService useFunctionService = context.getBean(UseFunctionService.class);
//3.调用bean的方法
System.out.println(useFunctionService.sayHello("java config"));
context.close(); } }

												

最新文章

  1. JavaScript获取当前日期,昨天,今天日期以及任意天数间隔日期
  2. 【原创】android内存管理-hprof文件
  3. cocos2dx3.0 removeFromParent和removeAllChildren含义
  4. hdwiki 在IIS 下的伪静态
  5. android Unable to instantiate application
  6. 【C++基础】sizeof 数组 指针 空NULL
  7. python中的编码声明
  8. MPLS VPN随堂笔记3
  9. 面向对象(this的问题二)
  10. day03笔记
  11. 为DBNavigator的按钮加中文
  12. Python简介及环境安装
  13. webservice 配置
  14. CSS| 實例---寬度自由調節button,圖片切換
  15. ERP渠道文档管理(二十四)
  16. 【JSP】EL表达式语言
  17. node.js 连接 sql server 包括低版本的sqlserver 2000
  18. ubuntu sudo apt-get update与sudo apt-get upgrade的作用及区别,以及python pip的安装
  19. jquery实现的时间轴
  20. iOS开发CocoaPods使用

热门文章

  1. HDU6719 Strassen(__int128)
  2. C#-概念-基础类库:基础类库
  3. c#继承与构造函数的调用
  4. 安卓中如何调用jni
  5. 把Notepad++的tab设置为四个空格
  6. Bootstrap 学习笔记5 进度条媒体对象和well组件
  7. PTA 1154 Vertex Coloring
  8. 牛客 打印N个数组整体最大的Top K
  9. Android 中三种启用线程的方法
  10. [Linux] 016 压缩解压命令