springboot-2-ioc
在spring环境下, ioc(控制反转 和 DI (依赖注入) 是等效的, 主要体现一种组合的松耦合思想. spring Ioc容器负责创建Bean, 并将Bean注入到所需的Bean中, 有xml, 注解, java配置, groovy配置等实现
声明bean的注解有:
@Component, 没有角色
@Controller, 为mvc的展现层
@RestController, springboot中使用, 相当于 @Controller和@ResponseBody
@Service, 为Service层
@Repositoy, 为数据交互层
使用bean的注解有:
@Autowired
@Resource: JSR-
@Inject: JSR-
1, 使用注解声明的bean的使用
这种方式比较简单, 加个注解, spring就会根据aop注解去判断并加载到context中
TestService
package com.wenbronk.config.annotation; import org.springframework.stereotype.Service; /**
* Created by wenbronk on 2017/5/12.
*/
@Service
public class TestService { public String sayHello(String hello) {
return "Hello" + hello;
} }
TestController
package com.wenbronk.config.annotation; import org.springframework.stereotype.Service; import javax.annotation.Resource; /**
* Created by wenbronk on 2017/5/12.
*/
@Service
public class TestController { @Resource
private TestService testService {
public String sayHello(String word) {
return testService.sayHello(word);
} }
Config配置, 使用@SpringBootConfiguration配置, 声明当前类为一个配置类
package com.wenbronk.config.annotation; import org.springframework.boot.SpringBootConfiguration;
import org.springframework.context.annotation.ComponentScan; /**
* Created by wenbronk on 2017/5/12.
*/
@SpringBootConfiguration
@ComponentScan(value = {"com.wenbronk.config.annotation"})
public class AnnotationConfig { }
Test
package com.wenbronk.config.annotation; import org.springframework.context.annotation.AnnotationConfigApplicationContext; /**
* Created by wenbronk on 2017/5/12.
*/ public class TestAnnotation {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AnnotationConfig.class);
TestController user = context.getBean(TestController.class);
String sayHello = user.sayHello("你好");
System.out.println(sayHello);
}
}
2, 使用java进行配置
关键在于config配置, 要保证使用的每个bean在config类下都有@Bean加入到context中
1), TestService, TestController,
和上面的一样, 去掉 @Service就好...
2), javaconfig, 使用@Bean标签注入到context中
package com.wenbronk.config.java; import org.springframework.boot.SpringBootConfiguration;
import org.springframework.context.annotation.Bean; /**
* 除了使用上面那种方法, 还可以直接new
* Created by wenbronk on 2017/5/12.
*/
@SpringBootConfiguration
public class JavaConfig2 { @Bean
public FunctionService functionService() {
return new FunctionService();
} /**
* spring容器中有的bean, 可以直接作为参数传入
* @param functionService
* @return
*/
@Bean
public UserFunctionService userFunctionService(FunctionService functionService) {
UserFunctionService userFunctionService = new UserFunctionService();
userFunctionService.setFunctionService(functionService);
return userFunctionService;
} }
spring容器提供一个好处, 在context中管理的bean, 可通过形参的形式直接注入
3), Test
package com.wenbronk.config.java; import org.springframework.context.annotation.AnnotationConfigApplicationContext; /**
* Created by root on 2017/5/12.
*/
public class TestJava { public static void main(String[] args ) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(JavaConfig2.class);
TestController bean = context.getBean(TestController.class);
String hello = bean.sayHello("hello");
System.out.println(hello);
}
}
http://www.cnblogs.com/wenbronk/
springboot-2-ioc的更多相关文章
- SpringBoot框架——从SpringBoot看IoC容器初始化流程之方法分析
目录 一.概观Spring Boot 二.Spring Boot应用初始化 2.1 初始化入口 2.2 SpringApplication的run方法 2.3 方法分析 三.容器创建与初始化 3.1 ...
- 数据库连接不上的原因以及springBoot的ioc无法自动注入
无法自动注入解决了,数据池的连接还有问题: 错误原因1: :数据库用的是Mysql8版本,以前的配置mysql驱动包却是5.1.37版本.只需修改驱动包为8.0.11版本即可. <!-- mys ...
- springboot ---> spring ioc 注册流程 源码解析 this.prepareContext 部分
现在都是在springboot 中 集成 spirng,那我们就从springboot 开始. 一:springboot 启动main 函数 public static void main(Strin ...
- 手把手教你调试SpringBoot启动 IoC容器初始化源码,spring如何解决循环依赖
授人以鱼不如授人以渔,首先声明这篇文章并没有过多的总结和结论,主要内容是教大家如何一步一步自己手动debug调试源码,然后总结spring如何解决的循环依赖,最后,操作很简单,有手就行. 本次调试 是 ...
- 【归纳】springboot中的IOC注解:注册bean和使用bean
目前了解的springboot中IOC注解主要分为两类: 1. 注册bean:@Component和@Repository.@Service.@Controller .@Configuration 共 ...
- 尚硅谷springboot学习26-嵌入式servlet容器自动配置、启动原理
EmbeddedServletContainerAutoConfiguration:嵌入式的Servlet容器自动配置 @AutoConfigureOrder(Ordered.HIGHEST_PREC ...
- springboot超详细笔记
一.Spring Boot 入门 1.Spring Boot 简介 简化Spring应用开发的一个框架: 整个Spring技术栈的一个大整合: J2EE开发的一站式解决方案: 2.微服务 2014,m ...
- springboot(八) 嵌入式Servlet容器自动配置原理和容器启动原理
1.嵌入式Servlet容器自动配置原理 1.1 在spring-boot-autoconfigure-1.5.9.RELEASE.jar => springboot自动配置依赖 jar包下,E ...
- springboot简单入门笔记
一.Spring Boot 入门 1.Spring Boot 简介 简化Spring应用开发的一个框架: 整个Spring技术栈的一个大整合: J2EE开发的一站式解决方案: 2.微服务 2014,m ...
- SpringBoot系列之集成jsp模板引擎
目录 1.模板引擎简介 2.环境准备 4.源码原理简介 SpringBoot系列之集成jsp模板引擎 @ 1.模板引擎简介 引用百度百科的模板引擎解释: 模板引擎(这里特指用于Web开发的模板引擎)是 ...
随机推荐
- 一个例子教你理解java回调机制
网上很多例子都写的很难理解,笔者刚开始都已经弄晕菜了. 这个例子,应该是再简单,再简洁不过的了,例子目的是测试某个方法的执行时间.这里就写三个java类,一个接口,一个实现,还有一个用于测试时间的类. ...
- solr特点三: defType(查询权重排序)
Solr的defType有dismax/edismax两种,这两种的区别,可参见:http://blog.csdn.net/duck_genuine/article/details/8060026 e ...
- CentOS 7安装OpenVPN
命令很简单,但是网上似乎没资料,只有RHEL6以下的资料. 直接贴命令: 1 2 3 4 5 cd ~ wget http://swupdate.openvpn.org/as/openvpn-as-2 ...
- 修改chrome插件
背景 例子为:ModHeader插件,顾名思义可以修改request header的插件,官方地址为:https://chrome.google.com/webstore/detail/modhead ...
- jmeter测试mysql数据库之JDBC请求
所有jmeter基本组件功能本文不做介绍.jmeter要链接mysql数据库,首先得下载mysql jdbc驱动包(注:驱动包的版本一定要与你数据库的版本匹配,驱动版本低于mysql版本有可能会导致连 ...
- Jenkins权限管控
需求: 不同的账号角色进入只能看到自己对应的项目,且只能拥有构建等基本权限. 如wechat用户进入系统只能看到以wechat开头的job(具体匹配什么名称的job,可以设置) 目录: 1.安装插件 ...
- java环境和Tomcat环境
这些变量名是一样的,变量的值需要自己根据自己的安装位置来确定 JAVA_HOME C:\Program Files\Java\jdk1.8.0_151 CATALINA_HOME(这个可能不需要) D ...
- .net使用QQ邮箱发送邮件
/// <summary> /// 发送邮件 /// </summary> /// <param name="mailTo">要发送的邮箱< ...
- [C#学习笔记]你真的理解拆箱装箱吗?
学习一项新知识的时候,最好的方法就是去实践它. 前言 <CLR via C#>这本神书真的是太有意思了!没错我的前言就是这个. 装箱 首先来看下,下面这段代码 可以看到,每次循环迭代都会初 ...
- C# 使用dynamic类型来访问JObject对象
dynamic是C#里面的动态类型,可在未知类型的情况访问对应的属性,非常灵活和方便. 使用Json.Net可以把一个Json字符串转换成一个JObject对象,如果有已知强类型,如果有已知对应的强类 ...