依赖注入
Inversion of Control-IOC(控制翻转)和依赖注入(dependency injection-DI)
在Sping环境下是等同的概念,控制翻转是通过依赖注入实现的。所谓依赖注入指
的是容器负责创建对象和维护对象间的依赖关系,而不是通过对象本身负责自己
的创建和解决自己的依赖。
依赖注入的主要目的是为了解耦,体现了一种"组合"的理念。如果你希望你的类
具备某项功能的时候,是继承自已个具有此功能的父类好呢?还是组合另外一个
具有这个功能的类好呢?答案是不言而喻的,继承一个父类,子类将与父类耦合,组合另外一个类则使耦合度大大降低。
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)使用。
@Component、@Service、@Repository和@Controller是等效的,可根据需要选用。
注入Bean的注解,一般情况下通用。
@Autowired: Spring提供的注解
@Resource:JSR-250提供的注解
@Inject:JSR-330提供的注解
@Autowired、@Resource、@Inject可注解在set方法上或者属性上,习惯注解在属性上,优点是代码更少、层次更清晰。
编写功能类的Bean
package com.wisely.highlight_spring4.ch1.di;
import org.springframework.stereotype.Service;
@Service //1
public class FunctionService {
public String sayHello(String word){
return "Hello " + word +" !";
}
}
使用@Service注解声明当前FunctionService类是Spring管理的一个Bean 其中,
使用@Component、@Service、@Repository和@Controller是等效的,可根据需要选用。
使用功能类的Bean
package com.wisely.highlight_spring4.ch1.di;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service //1
public class UseFunctionService {
@Autowired //2
FunctionService functionService;
public String SayHello(String word){
return functionService.sayHello(word);
}
}
使用@Service注解声明当前UseFunctionService类是Spring管理的一个Bean
使用@Autowired将FunctionService的实体Bean注入到UseFunctionService中,让UseFunctionService
具备FunctionService的功能,此处使用JSP-330的@Inject注解或者JSR-250的@Resource注解是等效的。
配置类
package com.wisely.highlight_spring4.ch1.di;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration //1
@ComponentScan("com.wisely.highlight_spring4.ch1.di") //2
public class DiConfig {
}
@Configuration声明当前类是一个配置类。
使用@ComponentScan,自动扫描包名下所有使用@Component、@Service、@Repository和@Controller的类,并注册为Bean
package com.wisely.highlight_spring4.ch1.di;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class Main {
public static void main(String[] args) {
AnnotationConfigApplicationContext context =
new AnnotationConfigApplicationContext(DiConfig.class); //1
UseFunctionService useFunctionService = context.getBean(UseFunctionService.class); //2
System.out.println(useFunctionService.SayHello("world"));
context.close();
}
}
使用AnnotationConfigApplicationContext作为Spring容器,接受输入一个配置类作为参数:
获得声明配置的UseFunctionService的Bean。
![](data:image/png;base64,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)