Spring bean 并没有可变的状态 (比如 Service 类和 DAO 类),所以在某种程度上说 Spring 的单例 bean 是线程安全的。
Spring 容器在进行实例化时,会将 xml 配置的
<bean>
的信息封装成一个BeanDefinition
对象,Spring 根据BeanDefinition
来创建 Bean 对象,里面有很多的属性用来描述 Bean
2. 初始化赋值和销毁Bean
三级缓存解决循环依赖
一级缓存作用:限制 bean 在 beanFactory 中只存一份,即实现 singleton scope,解决不了循环依赖 二级缓存:缓存早期的 bean 对象(生命周期还没走完),二级缓存不能解决对象增强问题 三级缓存:缓存的是 ObjectFactory,表示对象工厂,用来创建某个对象的
AOP 称为面向切面编程,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被命名为“切面”(Aspect),减少系统中的重复代码,降低了模块间的耦合度,同时提高了系统的可维护性。
常见的 AOP 使用场景:
获取请求的用户名、请求方式、访问地址、模块名称、登录 ip、操作时间,记录到数据库的日志表中
Spring 支持编程式事务管理和声明式事务管理两种方式。
Spring 事务失效的场景有哪些
视图阶段(老旧 JSP 等)
前后端分离阶段(接口开发,异步)
点击进入 @SpringBootApplication
注解,可看见其由几个注解组成
@SpringBootConfiguration
:该注解与 @Configuration
注解作用相同,用来声明当前也是一个配置类。@ComponentScan
:组件扫描,默认扫描当前引导类所在包及其子包。@EnableAutoConfiguration
:SpringBoot 实现自动化配置的核心注解。其中 @EnableAutoConfiguration
又由几个注解组成
点开 spring.factories
中其中一个 configuration,可看见
Spring 的常见注解有哪些?
注解 | 说明 |
---|---|
@Component、@Controller、@Service、@Repository | 使用在类上用于实例化Bean |
@Autowired | 使用在字段上用于根据类型依赖注入 |
@Qualifier | 结合@Autowired一起使用用于根据名称进行依赖注入 |
@Scope | 标注Bean的作用范围 |
@Configuration | 指定当前类是一个 Spring 配置类,当创建容器时会从该类上加载注解 |
@ComponentScan | 用于指定 Spring 在初始化容器时要扫描的包 |
@Bean | 使用在方法上,标注将该方法的返回值存储到Spring容器中 |
@Import | 使用@Import导入的类会被Spring加载到IOC容器中 |
@Aspect、@Before、@After、@Around、@Pointcut | 用于切面编程(AOP) |
SpringMVC 常见的注解有哪些? |
注解 | 说明 |
---|---|
@RequestMapping | 用于映射请求路径,可以定义在类上和方法上。用于类上,则表示类中的所有的方法都是以该地址作为父路径 |
@RequestBody | 注解实现接收http请求的json数据,将json转换为java对象 |
@RequestParam | 指定请求参数的名称 |
@PathViriable | 从请求路径下中获取请求参数(/user/{id}),传递给方法的形式参数 |
@ResponseBody | 注解实现将controller方法返回对象转化为json对象响应给客户端 |
@RequestHeader | 获取指定的请求头数据 |
@RestController | @Controller + @ResponseBody |
Springboot 常见注解有哪些? |
注解 | 说明 |
---|---|
@SpringBootConfiguration | 组合了- @Configuration注解,实现配置文件的功能 |
@EnableAutoConfiguration | 打开自动配置的功能,也可以关闭某个自动配置的选 |
@ComponentScan | Spring组件扫描 |
注解 | 说明 |
---|---|
@Component、@Controller、@Service、@Repository | 使用在类上用于实例化Bean |
@Autowired | 使用在字段上用于根据类型依赖注入 |
@Qualifier | 结合@Autowired一起使用用于根据名称进行依赖注入 |
@Scope | 标注Bean的作用范围 |
@Configuration | 指定当前类是一个 Spring 配置类,当创建容器时会从该类上加载注解 |
@ComponentScan | 用于指定 Spring 在初始化容器时要扫描的包 |
@Bean | 使用在方法上,标注将该方法的返回值存储到Spring容器中 |
@Import | 使用@Import导入的类会被Spring加载到IOC容器中 |
@Aspect、@Before、@After、@Around、@Pointcut | 用于切面编程(AOP) |
注解 | 说明 |
---|---|
@RequestMapping | 用于映射请求路径,可以定义在类上和方法上。用于类上,则表示类中的所有的方法都是以该地址作为父路径 |
@RequestBody | 注解实现接收http请求的json数据,将json转换为java对象 |
@RequestParam | 指定请求参数的名称 |
@PathViriable | 从请求路径下中获取请求参数(/user/{id}),传递给方法的形式参数 |
@ResponseBody | 注解实现将controller方法返回对象转化为json对象响应给客户端 |
@RequestHeader | 获取指定的请求头数据 |
@RestController | @Controller + @ResponseBody |
本文作者:peepdd864
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!