目录
1.Spring包含的模块主要有什么
2.Core Container的作用
3.Data Access/Integration模块的作用
4.AOP模块的作用
5.Spring Web模块的作用
6.Test模块的作用
7.如何将一个类声明为Bean
8.@Component和@Bean的区别
9.能够注入Bean的注解有什么
10.@Resource注解
1.Spring包含的模块主要有什么
核心容器:Core Container
数据访问/整合:Data Access/Integration
面向切面编程:AOP
面向网页:Spring Web
单元测试:Test
详细图例如下:
2.Core Container的作用
1.是Spring框架的核心模块,主要提供IoC控制反转的依赖注入功能的支持
2.Spring其他所有功能都需要依赖此模块
3.Core Container中包含的模块作用
spring-core:Spring框架基本的核心工具类
spring-beans:提供对bean的装配、管理、实例化功能
spring-context:提供对国际化、事件传播、资源加载等功能
spring-expression:提供对表达式语言的支持
3.Data Access/Integration模块的作用
spring-jdbc:提供对数据库访问功能
spring-tx:提供对事务的支持
spring-orm:提供对Hibernate、iBatis等ORM框架的支持
spring-oxm:通过抽象层支撑OXM
spring-jms:提供消息服务
注意:
ORM,Object Relation Mapping;对象关系映射
OXM,Object XML Mapping;对象与XML映射
4.AOP模块的作用
AOP,Aspect Oriented Programming,包含以下模块:
spring-aspects:为AspectJ的集成提供支持
spring-aop:提供面向切面编程
spring-instrument:提供为JVM添加代理的功能
注意:AspectJ注解是AOP思想的具体实现方式
5.Spring Web模块的作用
spring-websocket:提供WebSocket支持,WebSocket能够使得客户端与服务端进行双向通信
spring-webmvc:提供Spring MVC支持
spring-web:提供Web功能支持
spring-webflux:提供WebFlux支持
注意:WebFlux是一个完全异步的响应式框架
6.Test模块的作用
Spring的测试对JUnit等常用的测试框架进行支持,使得单元测试变得十分简单
7.如何将一个类声明为Bean
使用注解:@Component,标注任意类为Spring的组件
也可以使用@Controller、@Service、@Repository
8.@Component和@Bean的区别
1.作用的位置不同:
@Component作用于类,@Bean作用于方法
2.灵活性不同:引入第三方库的类的方法装配到Spring容器时,只能用@Bean实现
3.原理不同:
@Component通过类路径扫描后自动装配到Spring容器中
@Bean是在标注的方法中定义了一个bean,从而可以使用这个bean
9.能够注入Bean的注解有什么
Spring内置:@Autowired注解,自动装配时进行依赖注入
JDK内置:@Resource注解
10.@Resource注解
源码:
@Target({TYPE, FIELD, METHOD})
@Retention(RUNTIME)
public @interface Resource {
String name() default "";
String lookup() default "";
Class<?> type() default java.lang.Object.class;
enum AuthenticationType {
CONTAINER,
APPLICATION
}
/
AuthenticationType authenticationType() default AuthenticationType.CONTAINER;
boolean shareable() default true;
String mappedName() default "";
String description() default "";
}
根据name属性是否有值进行依赖注入:
有值,则根据指定值寻找Spring容器的Bean对象进行依赖注入
@Controller
public class testAnnotation {
@Resource(name = "aaa")
@RequestMapping("/")
public String testIndex(){
return "index";
}
}
没有值,则默认取将要注入的属性的字段名,找到一个Bean对象然后注入即可
@Controller
public class testAnnotation {
@Resource
@RequestMapping("/")
public String testIndex(){
return "index";
}
}