Spring 是一款开源的轻量级 Java 开发框架,旨在提高开发人员的开发效率以及系统的可维护性。
其中 IoC(Inverse of Control:控制反转) 和 AOP(Aspect-Oriented Programming:面向切面编程)是Spring的两个核心思想
Spring以bean的方式组织和管理Java应用中的各个组件及其关系。Spring使用BeanFactory来产生和管理Bean,它是工厂模式的实现。BeanFactory使用控制反转(IoC)模式将应用的配置和依赖性规范与实际的应用程序代码分开
Spring帮助我们管理Bean分为两个部分:
声明bean的注解
注入bean的注解
注入用@Autowire的,需要指定id就用@Qualifier。
@Resource:由JSR-250提供
java配置类相关注解
@Configuration 声明当前类为配置类,相当于xml形式的Spring配置(类上)
@Bean 注解在方法上,声明当前方法的返回值为一个bean,替代xml中的方式(方法上)
@Configuration 声明当前类为配置类,其中内部组合了@Component注解,表明这个类是一个bean(类上)
切面(AOP)相关注解
Spring支持AspectJ的注解式切面编程。
@Aspect 声明一个切面(类上)
使用@After、@Before、@Around定义建言(advice),可直接将拦截规则(切点)作为参数。
@After 在方法执行之后执行(方法上) @Before 在方法执行之前执行(方法上) @Around 在方法执行之前与之后执行(方法上)
@PointCut 声明切点
在java配置类中使用@EnableAspectJAutoProxy注解开启Spring对AspectJ代理的支持(类上)
之所以区分开几种类型,一是spring想在以后的版本中为它们添加特殊技能,二是这种分层的做法使web架构更清晰,易读性与维护性更好。
@Component 和 @Bean 的区别是什么?
@Component 注解作用于类,而@Bean注解作用于方法。
@Component 和 @Bean 是两种使用注解来定义bean的方式。
Component :作用于类上,通常是通过类路径扫描来自动侦测以及自动装配到Spring容器中。(@Controller、@Service、@Repository )
@Bean: 作用于方法或注解上,通常这个方法中定义产生这个Bean的逻辑。用于显式声明单个bean,而不是让Spring像上面那样自动执行它。它将bean的声明与类定义分离,并允许您精确地创建和配置bean。而@Bean则常和@Configuration注解搭配使用
联系:
1、作用都是一样的,都是注册bean到Spring容器中。
2、引用第三方库中的类需要装配到Spring容器时,则只能通过@Bean来实现。
总结:
@Component和@Bean都是用来注册Bean并装配到Spring容器中,但是Bean比Component的自定义性更强。可以实现一些Component实现不了的自定义加载类。
2、@Bean主要用于第三方类库的加载到Spring Bean中,之前通过xml中的标签来实现,现在可直接在类中实现。
@Autowired 和 @Resource 的区别?
出身不同:@Autowired 来自于 Spring,而 @Resource 来自于 JDK 的注解; 使用时设置的参数不同:相比于 @Autowired 来说,@Resource 支持更多的参数设置,例如 name 设置,根据名称获取 Bean。
Bean 的作用域是指 Bean 在 Spring 整个框架中的某种行为模式,比如 singleton 单例作用域,就 表示 Bean 在整个 Spring 中只有一份,它是全局共享的,那么当其他人修改了这个值之后,那么另一 个人读取到的就是被修改的值。
Spring 容器在初始化一个 Bean 的实例时,同时会指定该实例的作用域。Spring有 6 种作用域,最后四种是基于 Spring MVC 生效的:
注意后 4 种状态是 Spring MVC 中的值,在普通的 Spring 项目中只有前两种。
Spring 框架中用到了哪些设计模式?
Spring Boot 可使用 Idea 或网页创建,它的设计思想是约定大于配置,类上标注 @SpringBootApplication 就可以启动 Spring Boot 项目了。
启动类上面的注解是@SpringBootApplication,它也是 Spring Boot 的核心注解,主要组合包含了以下 3 个注解:
配置文件作用:整个项目中所有的重要数据都是在配置文件中配置的。如
想象一下如果没有配置信息,那么 Spring Boot 项目就不能连接和操作数据库,甚至是不能保存可以用于排查问题的关键日志,所以配置文件的作用是非常重要的。
Spring Boot 配置文件主要分为以下两种格式:

同时出现的话,properties的优先级更高;但一般实际业务中,会采取统一的一种配置文件格式。

读取配置文件:
如果在项目中,想要主动的读取配置文件中的内容,可以使用 @Value 注解来实现。
@Value 注解使用“${}”的格式读取,如下代码所示:
- public class ReadYml {
- @Value("${server.port}")
- private String port;
- @PostConstruct
- public void postConstruct() {
- System.out.println("Read YML,port:" + port);
- } }
properties和 yml 对比: