IOC
控制反转 IOC Inversion Of Control
依赖注入 DI Dependency Injection
上面两个概念在Spring 环境下是同等概念,控制反转 是通过依赖注入实现的。
所谓依赖注入指的是由容器负责创建对象和维护对象间的依赖关系,而不是通过对象本身负责自己的创建和解决自己的依赖
依赖注入的主要目的是: 解耦 , 组合的耦合性小于继承
Spring IoC容器(ApplicationContext) 负责创建Bean, 并通过 容器将功能类Bean 注入到你需要的Bean中。Spring提供使用 xml, 注解, java配置, groovy配置实现Bean的创建和注入
无论是xml 配置,注解配置,还是java配置,都被称为配置元数据。 所谓元数据:即描述 数据 的数据。 元数据本身不具备任何可执行的能力,只能通过外界代码来对这些元数据进行解析后进行一些有意义操作。 Spring 容器解析这些配置元数据进行Bean 初始化, 配置, 和 管理依赖
声明Bean的注解:
@Component 组件: 没有明确的角色
@Service 在业务逻辑层使用(Service层)
@Repository 在数据访问层使用(dao层)
@Controller 在展现层使用( MVC--> Spring MVC) 使用
注入Bean的注解:
@Autowired : Spring 提供的注解
@Resource : JSR-250提供的注解
@Inject : JSR-300提供的注解
此三个注解可注解在set方法上或属性上,构造器上
获取IoC容器ApplicationContext:
Spring 为不同获取IoC容器的方式提供了不同的ApplicationContext实现类
1. xml配置方式
ApplicationContext ac = new XmlClassPathApplicationContext("classpath: bean.xml"); // 除了类路径下,还可使用文件位置( file:\\xxx\xxx.xml)
2. 注解
ApplicationContext ac = new AnnotationConfigApplicationContext(Xxxxx.class); 传入注解配置类,即被@Configuration修饰的类
@Configuration : 声明当前类是一个配置类
@ComponentScan : 自动扫描包下所有使用@Service, @Controller, @Repository, @Component的类,并注册为Bean
Java 配置 :
java config 是Spring 4.x 推荐的配置方式, 可以完全替代xml配置,即项目中无spring xml配置文件 。Java配置也是Spring Boot 推荐使用的方式
java 配置是通过 @Configuration 和 @Bean 来实现的
@Configuration : 声明当前类是一个配置类, 相当于一个Spring 配置的 xml 文件
@Bean : 注解在方法上, 声明当前方法的的返回值为一个Bean , 即将方法的返回值放入Bean容器中,由Spring 管理 , Bean的名称是方法名
public class JavaConfig{
@Bean
public UserDao userDao(){
return new UserDao();
}
Java 配置方式的依赖注入方式:
1. 注入UserDao的Bean的时候直接调用userDao()方法
2. 直接将UserDao作为参数传入userService() , 只要容器中存在某个Bean, 就可以在另一个Bean的声明方法的参数中写入
@Bean
public UserService userService(){
UserService userService = new UserService():
userService.setUserDao(userDao());
return userService;
}
@Bean
public UserService userService(UserDao userDao){
UserService userService = new UserService():
userService.setUserDao(userDao());
return userService;
}
来源:oschina
链接:https://my.oschina.net/u/4102983/blog/3035625