在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的更多相关文章

  1. SpringBoot框架——从SpringBoot看IoC容器初始化流程之方法分析

    目录 一.概观Spring Boot 二.Spring Boot应用初始化 2.1 初始化入口 2.2 SpringApplication的run方法 2.3 方法分析 三.容器创建与初始化 3.1 ...

  2. 数据库连接不上的原因以及springBoot的ioc无法自动注入

    无法自动注入解决了,数据池的连接还有问题: 错误原因1: :数据库用的是Mysql8版本,以前的配置mysql驱动包却是5.1.37版本.只需修改驱动包为8.0.11版本即可. <!-- mys ...

  3. springboot ---> spring ioc 注册流程 源码解析 this.prepareContext 部分

    现在都是在springboot 中 集成 spirng,那我们就从springboot 开始. 一:springboot 启动main 函数 public static void main(Strin ...

  4. 手把手教你调试SpringBoot启动 IoC容器初始化源码,spring如何解决循环依赖

    授人以鱼不如授人以渔,首先声明这篇文章并没有过多的总结和结论,主要内容是教大家如何一步一步自己手动debug调试源码,然后总结spring如何解决的循环依赖,最后,操作很简单,有手就行. 本次调试 是 ...

  5. 【归纳】springboot中的IOC注解:注册bean和使用bean

    目前了解的springboot中IOC注解主要分为两类: 1. 注册bean:@Component和@Repository.@Service.@Controller .@Configuration 共 ...

  6. 尚硅谷springboot学习26-嵌入式servlet容器自动配置、启动原理

    EmbeddedServletContainerAutoConfiguration:嵌入式的Servlet容器自动配置 @AutoConfigureOrder(Ordered.HIGHEST_PREC ...

  7. springboot超详细笔记

    一.Spring Boot 入门 1.Spring Boot 简介 简化Spring应用开发的一个框架: 整个Spring技术栈的一个大整合: J2EE开发的一站式解决方案: 2.微服务 2014,m ...

  8. springboot(八) 嵌入式Servlet容器自动配置原理和容器启动原理

    1.嵌入式Servlet容器自动配置原理 1.1 在spring-boot-autoconfigure-1.5.9.RELEASE.jar => springboot自动配置依赖 jar包下,E ...

  9. springboot简单入门笔记

    一.Spring Boot 入门 1.Spring Boot 简介 简化Spring应用开发的一个框架: 整个Spring技术栈的一个大整合: J2EE开发的一站式解决方案: 2.微服务 2014,m ...

  10. SpringBoot系列之集成jsp模板引擎

    目录 1.模板引擎简介 2.环境准备 4.源码原理简介 SpringBoot系列之集成jsp模板引擎 @ 1.模板引擎简介 引用百度百科的模板引擎解释: 模板引擎(这里特指用于Web开发的模板引擎)是 ...

随机推荐

  1. 一个例子教你理解java回调机制

    网上很多例子都写的很难理解,笔者刚开始都已经弄晕菜了. 这个例子,应该是再简单,再简洁不过的了,例子目的是测试某个方法的执行时间.这里就写三个java类,一个接口,一个实现,还有一个用于测试时间的类. ...

  2. solr特点三: defType(查询权重排序)

    Solr的defType有dismax/edismax两种,这两种的区别,可参见:http://blog.csdn.net/duck_genuine/article/details/8060026 e ...

  3. CentOS 7安装OpenVPN

    命令很简单,但是网上似乎没资料,只有RHEL6以下的资料. 直接贴命令: 1 2 3 4 5 cd ~ wget http://swupdate.openvpn.org/as/openvpn-as-2 ...

  4. 修改chrome插件

    背景 例子为:ModHeader插件,顾名思义可以修改request header的插件,官方地址为:https://chrome.google.com/webstore/detail/modhead ...

  5. jmeter测试mysql数据库之JDBC请求

    所有jmeter基本组件功能本文不做介绍.jmeter要链接mysql数据库,首先得下载mysql jdbc驱动包(注:驱动包的版本一定要与你数据库的版本匹配,驱动版本低于mysql版本有可能会导致连 ...

  6. Jenkins权限管控

    需求: 不同的账号角色进入只能看到自己对应的项目,且只能拥有构建等基本权限. 如wechat用户进入系统只能看到以wechat开头的job(具体匹配什么名称的job,可以设置) 目录: 1.安装插件 ...

  7. java环境和Tomcat环境

    这些变量名是一样的,变量的值需要自己根据自己的安装位置来确定 JAVA_HOME C:\Program Files\Java\jdk1.8.0_151 CATALINA_HOME(这个可能不需要) D ...

  8. .net使用QQ邮箱发送邮件

    /// <summary> /// 发送邮件 /// </summary> /// <param name="mailTo">要发送的邮箱< ...

  9. [C#学习笔记]你真的理解拆箱装箱吗?

    学习一项新知识的时候,最好的方法就是去实践它. 前言 <CLR via C#>这本神书真的是太有意思了!没错我的前言就是这个. 装箱 首先来看下,下面这段代码 可以看到,每次循环迭代都会初 ...

  10. C# 使用dynamic类型来访问JObject对象

    dynamic是C#里面的动态类型,可在未知类型的情况访问对应的属性,非常灵活和方便. 使用Json.Net可以把一个Json字符串转换成一个JObject对象,如果有已知强类型,如果有已知对应的强类 ...