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开发的模板引擎)是 ...
随机推荐
- Python学习-14.Python的输入输出(三)
在Python中写文件也是得先打开文件的. file=open(r'E:\temp\test.txt','a') file.write('append to file') file.close() 第 ...
- 如何修改TFS 2013中工作项附件大小限制
默认情况下,TFS工作项的附件大小限制为4MB.我们可以通过调用TFS提供的Web Service将这个限制调整最高到2GB. 调整这个设置的必备条件是你需要拥有TFS应用层管理员的权限.下面来看看如 ...
- Bootstrap模态框modal的高度和宽度设置
(1)高度 将style=“height:900px”放在<div class = "modal-dialog">或者更外层上,整个模态框的高度不会发生变化 如下图所示 ...
- h5页面宽度设置7.5rem
function ready() { var u = navigator.userAgent; var winW = document.documentElement.clientWidth; if ...
- C#中实现对象的深拷贝
深度拷贝指的是将一个引用类型(包含该类型里的引用类型)拷贝一份(在内存中完完全全是两个对象,没有任何引用关系).......... 直接上代码: /// <summary> /// 对象的 ...
- Python 日常学习
习惯了java的思想.用java的思想来获取python元组中的数据.结果出错了. yuanzu_s = ("one", "two", "three& ...
- vsftp -samba-autofs
摘要: 1.FTP文件传输协议,PAM可插拔认证模块,TFTP简单文件传输协议. 注意:iptables防火墙管理工具默认禁止了FTP传输协议的端口号 2.vsftpd服务程序三种认证模式?三种认证模 ...
- 基于SSH的客户关系管理系统CRM-JavaWeb项目-有源码
开发工具:Myeclipse/Eclipse + MySQL + Tomcat 项目简介: 项目的编译和运行:1 将数据库导入MysSql里 :打开HeidiSql这个图形化工具,新建一个数据库, 可 ...
- 使用Anaconda的python安装虚拟环境是出现错误:python -m venv venvdir----Error: Command '['D:\\Development\\Django\\test\\Scripts\\python.exe', '-Im', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exit
在创建python虚拟环境的时候,如果使用的是Anaconda中集成的python -m venv venvdir就会出现不能安装pip的错误,原因是Anaconda没有ensurepip, 解决办法 ...
- 常用类(日期时间格式转换,date,枚举)
1 常用类 1.1 日期时间类 计算机如何表示时间? 时间戳(timestamp):距离特定时间的时间间隔. 计算机时间戳是指距离历元(1970-01-01 00:00:00:000)的时间间隔(ms ...