Spring 是一种轻量级开发框架,皆在指提高开发人员的开发效率以及系统的可维护性。
特征:
@RestController注解,相当于 @Controller + @ResponseBody 两个注解的结合,返回 json 数据不需要在方法前面加 @ResponeBody 注解了,但使用 @RestController 这个注解,就不能返回 jsp,html 页面了。视图解析器无法解析 jsp ,html 页面
暂时略
@Component
注解作用于类,而 @Bean
注解作用于 方法;@Component
通常是通过类路径扫描来自动侦测以及自动装配到Soring容器中(我们可以使用 @ComponentScan
注解定义要扫描的路径从中标识了需要装配的类自动装配到 Spring 的 Bean容器中)。@Bean
注解通常是我们在标有该注解的方法中定义产生这个 bean, @Bean
告诉了Spring 这是某个类的实例,当我们需要它的时候还给我们。@Bean
注解比 Component
注解的自定义更强,而且很多地方我们只能通过 @Bean
注解来注册 bean
。比如当我们引用第三方库中的类需要装配到 Spring
容器时,则只能通过 @Bean
来实现。我们一般使用 @Autowired 注解自动装配 bean,要想把类表示成可用于 @Autowired 注解自动装配的 bean 的类,采用以下注解可实现:
@Component
:通用的注解,可标注任意类为 Spring
组件。如果一个 bean
不知道属于哪个层,可以使用 @Component
注解标注。@Repository
:对应持久层即 Dao
层,主要用于数据库相关操作;@Service
:对应服务层,主要涉及一些复杂的逻辑,需要用到Dao
层;@Controller
:对应 Spring MVC
控制层,主要用于接收用户请求并调用 Service
层返回数据给前端。推荐阅读:@Chandler Qian版 Spring Bean 的声明周期
Bean
容器找到配置文件中 Spring Bean
的定义;Bean
容器利用 Java Reflection API
创建一个 Bean
的实例; set()
方法设置一些属性值; Bean
实现了BeanNameAware
接口,调用 setBeanName()
方法,传入Bean
的名字;Bean
实现了 BeanClassLoaderAware
接口,调用setBeanClassLoader()
方法,传入ClassLoader
对象的实例。 *.Aware
接口,就调用相应的方法。Bean
的Spring
容器相关的BeanPostProcessor
对象,执行postProcessBeforeInitialization()
方法Bean
实现了InitializingBean
接口,执行afterPropertiesSet()
方法。Bean
在配置文件中的定义包含init-method
属性,执行指定的方法。Bean
的Spring
容器相关的BeanPostProcessor
对象,执行postProcessAfterInitialization()
方法Bean
的时候,如果Bean
实现了DisposableBean
接口,执行destroy()
方法。Bean
的时候,如果Bean
在配置文件中的定义包含destroy-method
属性,执行指定的方法。暂略
直接阅读这篇文章吧!面试官:“谈谈Spring中都用到了那些设计模式?”
声明式事务又分为两种:
TransactionDefinition 接口中定义了五个表示隔离级别的常量:
支持当前事务的情况?
不支持当前事务的情况:
其它 情况:
暂略