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(); } }

												

springboot实战(汪云飞)学习-1-2的更多相关文章

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

    java EE开发的颠覆者 spring boot 实战 随书学习-1 1.学习案例都是maven项目,首先要在eclipse 中配置 maven,主要修改maven的配置文件:配置文件下载链接: h ...

  2. 【IT名人堂】何云飞:阿里云数据库的架构演进之路

    [IT名人堂]何云飞:阿里云数据库的架构演进之路 原文转载自:IT168 ​ 如果说淘宝革了零售的命,那么DT革了企业IT消费的命.在阿里巴巴看来,DT时代,企业IT消费的模式变成了“云服务+数据”, ...

  3. SpringBoot实战 之 异常处理篇

    在互联网时代,我们所开发的应用大多是直面用户的,程序中的任何一点小疏忽都可能导致用户的流失,而程序出现异常往往又是不可避免的,那该如何减少程序异常对用户体验的影响呢?其实方法很简单,对异常进行捕获,然 ...

  4. SpringBoot整合阿里云OSS文件上传、下载、查看、删除

    1. 开发前准备 1.1 前置知识 java基础以及SpringBoot简单基础知识即可. 1.2 环境参数 开发工具:IDEA 基础环境:Maven+JDK8 所用技术:SpringBoot.lom ...

  5. apollo客户端springboot实战(四)

    1. apollo客户端springboot实战(四) 1.1. 前言   经过前几张入门学习,基本已经完成了apollo环境的搭建和简单客户端例子,但我们现在流行的通常是springboot的客户端 ...

  6. SpringBoot实战之异常处理篇

    在互联网时代,我们所开发的应用大多是直面用户的,程序中的任何一点小疏忽都可能导致用户的流失,而程序出现异常往往又是不可避免的,那该如何减少程序异常对用户体验的影响呢?其实方法很简单,对异常进行捕获,然 ...

  7. Docker深入浅出系列 | 单机Nginx+Springboot实战

    目录 Nginx+Springboot实战 前期准备 实战目标 实战步骤 创建Docker网络 搭建Mysql容器 搭建额度服务集群 搭建Nginx服务 验证额度服务 附录 Nginx+Springb ...

  8. springboot实战开发全套教程,让开发像搭积木一样简单!Github星标已上10W+!

    前言 先说一下,这份教程在github上面星标已上10W,下面我会一一给大家举例出来全部内容,原链接后面我会发出来!首先我讲一下接下来我们会讲到的知识和技术,对比讲解了多种同类技术的使用手日区别,大家 ...

  9. 《Node.js开发实战详解》学习笔记

    <Node.js开发实战详解>学习笔记 ——持续更新中 一.NodeJS设计模式 1 . 单例模式 顾名思义,单例就是保证一个类只有一个实例,实现的方法是,先判断实例是否存在,如果存在则直 ...

随机推荐

  1. Hive学习之路(一)Hive初识

    Hive简介 什么是Hive Hive由Facebook实现并开源 是基于Hadoop的一个数据仓库工具 可以将结构化的数据映射为一张数据库表 提供HQL(Hive SQL)查询功能 底层数据是存储在 ...

  2. HTML 浅层漫谈

    讲到HTML最主要的就是如何给这个网页搭架子给他大致的把这个人物样子先慢慢画出来,然后我们后面去学习这个CSS还有JS的时候给这个雏形慢慢的去加一些东西,让你的网页变得越来越好看 1.标签的使用 a: ...

  3. STM32 I2C 难点---这个不错,留着慢慢研究

    来自:http://bbs.ednchina.com/BLOG_ARTICLE_2154168.HTM I2C 总线在所有嵌入式系统中用得极广, 是一个工业级别的总线, 但由于STM32 是一个32位 ...

  4. 求 主板型号 945GME - ICH7M/U 支持的最大内存,以及内存型号 10

    https://zhidao.baidu.com/question/400302290.html 求 主板型号 945GME - ICH7M/U 支持的最大内存,以及内存型号 10 主板型号 明基 J ...

  5. Vue Cli 3:vue.config.js配置文件

    Vue Cli 3生成的项目结构,没有build.config目录,而是使用vue.config.js来进行配置. vue.config.js 是一个可选的配置文件,如果项目的 (和 package. ...

  6. 安装loadrunner11的时候提示'命令行选项语法错误。键入命令 / ?’ 怎么办

    重启电脑后再安装.若还是不行就运行安装程序自带的vcredist_x86.exe,在我电脑的安装包的目录是loadrunner-11\lrunner\Kor\prerequisites\vc2005_ ...

  7. Python 根据入栈顺利判定出栈顺序

    1.读取入栈,出栈数据: 2.把数据分别转化成整数列表: 3.新建栈列表,用入栈数据进行压栈:如果栈列表不为空,并且栈顶层数据为出栈的元素:删除栈列表的顶层数据: 4.如果栈列表不为空,说明栈列表里面 ...

  8. CentnOS7安装Nginx“No package available”

    Nginx相对Apache有轻量级,简洁的优点,算得上Apache的优秀替代品了,但是由于Nginx不在yum的官方源中,因此安装时总会出现失败的现象,只需: yum install epel-rel ...

  9. #3831 TJOI2013单词

    WOJ#3831 TJOI2013单词 题面 某人读论文,一篇论文是由许多单词组成.但他发现一个单词会在论文中出现很多次,现在想知道每个单词分别在论文中出现多少次. 输入 第一个一个整数 N ,表示有 ...

  10. 8、numpy——数组的迭代

    1.单数组的迭代 NumPy 迭代器对象 numpy.nditer 提供了一种灵活访问一个或者多个数组元素的方式. 迭代器最基本的任务的可以完成对数组元素的访问. 1.1 默认迭代顺序 import ...