1.Spring概述
1.概述
Spring使用简单的POJO(无任何限制的普通Java对象,pojo实质上可以理解为简单的实体类)来进行企业级开发。每一个被Spring管理的Java对象都称之为Bean;而Spring提供了一个IoC容器用来初始化对象,解决对象间的依赖管理和对象的使用。
2.依赖注入
控制翻转和依赖注入在Spring环境下是等同的概念,控制翻转是通过依赖注入实现的。依赖注入指的是容器负责创建对象和维护对象间的依赖关系,而不是通过对象本身负责自己的创建和解决自己的依赖。
Spring IoC容器负责创建Bean,并通过容器将功能类Bean注入到你需要的Bean中。
无论是xml配置,注解配置还是java配置,都称为配置元数据,即描述数据的数据。元数据本身不具备任何可执行能力,只能通过外界代码来对这些元数据解析后执行一些有意义的操作。Spring容器解析这些配置元数据进行Bean初始化,配置和管理依赖。
声明Bean的注解:@Component,@Service,@Repository,@Controller
注入Bean的注解,一般情况下通用:@Autowired:Spring提供的注解;@Inject:JSR-330提供;@Resource:JSR-250提供
基于注解的Bean的初始化和依赖注入,Spring容器类选用AnnotationConfigApplicationContext。
3.java配置
java配置是通过@Configuration和@Bean来实现的。
@Configuration声明当前类是一个配置类,相当于一个Spring配置的xml文件。
@Bean注解在方法上,声明当前方法的返回值为一个Bean。
@ComponentScan:自动扫描包名下所有使用@Component,@Service,@Repository,@Controller
java配置方式(不使用@Component,@Service,@Repository,@Controller)
@Configuration
public class JavaConfig {
@Bean
public FunctionService functionService(){
return new FunctionService();
}
@Bean
public UserFunctionService userFunctionService(){
UserFunctionService userFunctionService = new UserFunctionService();
userFunctionService.setFunctionService(functionService());//1
return userFunctionService;
}
@Bean
public UserFunctionService userFunctionService(FunctionService functionService){
UserFunctionService userFunctionService = new UserFunctionService();
userFunctionService.setFunctionService(functionService);//2
return userFunctionService;
}
}
代码解释:注入Function的Bean时候推荐直接调用functionService()。 另一种方式,直接将FunctionService作为参数给userFunctionService()。在Spring容器中,只要容器中存在某个Bean,就可以在另外一个Bean的声明方法的参数中写入。
3.AOP
Spring的AOP存在目的是为了解耦。
Spirng支持AspectJ的注解式切面编程。
- 使用@AspectJ声明是一个切面。
- 使用@After,@Before,@Around定义建言(advice),可直接将拦截规则(切点)作为参数。
- @After,@Before,@Around参数的拦截规则为切点(PointCut),可使用@PointCut专门定义拦截规则,然后在@After,@Before,@Around的参数中调用。
- 其中符合条件的每一个被拦截处为连接点(JoinPoint)。
使用@EnableAspectJAutoProxy注解开启Spring对AspectJ代理的支持。