Spring及相关框架的重要的问题

Java框架

问题一:Spring框架中的单例bean是线程安全的吗?

 看下图,不能被修改的成员变量就是无状态的类,无状态的类没有线程安全问题,所以在开发中尽量避免可修改的成员变量。

回答:不是线程安全的,Spring中有一个@Scope注解,默认的值是singleton,单例的,因为一般在Spring的bean中都是注入无状态的对象,没有线程安全问题;而如果在bean中定义了可修改的成员变量,则要考虑线程安全问题,可以使用多例或加锁来解决。

问题二:什么是AOP,有没有在项目中使用到AOP?Spring的事务如何实现?

将非业务逻辑代码(交叉业务)提取出来形成一个独立的横向切面(将业务逻辑看成是纵向的),以横向交叉的方式应用到业务流程中,使代码的复用性增强,降低模块间的耦合度,同时提高系统的可维护性。

常见的AOP使用场景:

  • 记录操作日志
  • 缓存处理
  • Spring中内置的事务处理

在后台开发中,都需要记录操作日志:

Spring的事务其本质是通过AOP实现的,对方法前后进行拦截,在执行方法之前开启事务,在执行完目标方法后根据执行情况提交或者回滚事务。

列举一些重要的Spring模块?
Spring Core:Spring框架的核心,提供了控制反转(IoC)容器和依赖注入(DI)功能。

Spring Beans:定义了Spring的beans的配置方式,包括基于注解和XML的配置。

Spring Context:提供了一种更加丰富的框架应用上下文,包括国际化、事件传播、资源访问等。

Spring AOP:面向切面编程模块,允许开发者定义横切关注点,如日志记录、事务管理等。

Spring DAO:数据访问对象模块,提供了对JDBC的抽象,简化了数据访问层的编码。

Spring JDBC:提供了对Java数据库连接(JDBC)的抽象和简化,使得数据库操作更加方便。

Spring ORM:对象关系映射模块,支持与Hibernate、JPA、MyBatis等ORM工具的集成。

Spring TX:事务管理模块,提供了声明式和编程式事务管理的支持。

BeanFactory 和 ApplicationContext有什么区别?
是spring的核心接口,都可以作为容器,ApplicationContext是BeanFactory的子接口。
BeanFactory: 是spring最底层的接口,包含各种Bean的定义和Bean的管理。
ApplicationContext: 作为BeanFactory的派生,除了有BeanFactory的功能以外,还提供了更多的功能。

区别:

BeanFactroy采用的是延迟加载形式来注入Bean的,使用到bean才会加载。ApplicationContext一次性加载所有bean。
BeanFactory需要手动注册,而ApplicationContext则是自动注册。
BeanFactory不支持国际化,ApplicationContext支持国际化(实现MessageSource接口)。
BeanFactory不支持AOP,ApplicationContext支持AOP,可以与Spring的AOP框架集成,提供声明式事务管理

问题三:SpringMVC的执行流程?

Spring 的常见注解有哪些?

第一类是:声明bean,有@Component、@Service、@Repository、@Controller

第二类是:依赖注入相关的,有@Autowired、@Qualifier、@Resourse

第三类是:设置作用域 @Scope

第四类是:spring配置相关的,比如@Configuration,@ComponentScan 和 @Bean

第五类是:跟aop相关做增强的注解 @Aspect,@Before,@After,@Around,@Pointcut

SpringMVC常见的注解有哪些?

有@RequestMapping:用于映射请求路径;

@RequestBody:注解实现接收http请求的json数据,将json转换为java对象;

@RequestParam:指定请求参数的名称;

@PathViriable:从请求路径下中获取请求参数(/user/{id}),传递给方法的形式参数;@ResponseBody:注解实现将controller方法返回对象转化为json对象响应给客户端。@RequestHeader:获取指定的请求头数据,还有像@PostMapping、@GetMapping这些。

Springboot自动配置原理

在Spring Boot项目中的引导类上有一个注解@SpringBootApplication,这个注解是对三个注解进行了封装,分别是:

  • @SpringBootConfiguration

  • @EnableAutoConfiguration

  • @ComponentScan

其中@EnableAutoConfiguration是实现自动化配置的核心注解。

该注解通过@Import注解导入对应的配置选择器。关键的是内部就是读取了该项目和该项目引用的Jar包的的classpath路径下META-INF/spring.factories文件中的所配置的类的全类名。

在这些配置类中所定义的Bean会根据条件注解所指定的条件来决定是否需要将其导入到Spring容器中。

一般条件判断会有像@ConditionalOnClass这样的注解,判断是否有对应的class文件,如果有则加载该类,把这个配置类的所有的Bean放入spring容器中使用。

  • 29
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值