在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. Solr 从文件创建索引

    http://blog.csdn.net/clj198606061111/article/details/21492457 http://wiki.apache.org/solr/Extracting ...

  2. 配置git使用socks5代理

    git config --global http.proxy 'socks5://127.0.0.1:1080' git config --global https.proxy 'socks5://1 ...

  3. Linq中的group by多表多字段

    在sql中,如果有group by,那么select的字段只能包含分组内容,或者count.sum.avg这些统计字段. 但在linq里面,是:group 你想要什么字段 by 分组字段 比如: va ...

  4. 当前安卓App加固到底该如何做到防篡改?

    安卓dalvik虚拟机要求dex文件在内存中以明文形式存在,那么任何加壳方法到头来到了内存还是明文存在,各种dump方法终究是可以获得它的.App究竟应该如何加固才能防止被篡改?   加固和 dump ...

  5. iOS View 外层奇怪的黑线

    最近碰到一个问题,当时是为了建了一个能自动适应内容的 Label.根据内容,我计算出需要的尺寸,然后把新尺寸设置给 Label. 但是显示的时候,一个奇怪的现象出现了,Label 的顶端总是有一条浅浅 ...

  6. KVM到KVM之v2v迁移

    1.源KVM虚拟主机node1 (1).查看源KVM虚拟主机上的虚拟机列表,本文计划将oeltest01虚拟机迁移到其它KVM虚拟主机中. (2).查看oeltest01虚拟机磁盘文件位置/data/ ...

  7. js加密解密 base64

    <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title> ...

  8. djngo 1.9版本以后 Foreignkey() 字段 第二个参数 on_delete 必不可少, mysql 外键可以为空

    一.外键的删除 1.常见的使用方式(设置为null) class BookModel(models.Model): """ 书籍表 """ ...

  9. 利用django form 模块处理post请求

    在django框架中,利用 form 模块处理post请求提交的数据,可以大大提高开发效率,减小代码冗余度,提高性能 models.py 中: from django.db import models ...

  10. php性能优化二(PHP配置php.ini)

    PHP优化对于PHP的优化主要是对php.ini中的相关主要参数进行合理调整和设置,以下我们就来看看php.ini中的一些对性能影响较大的参数应该如何设置. # vi /etc/PHP.ini (1) ...