专业的编程技术博客社区

网站首页 > 博客文章 正文

Spring框架基础知识-第四节内容(Spring基础配置)

baijin 2025-07-23 12:55:15 博客文章 3 ℃ 0 评论

Spring基础配置

Spring框架本身有四大原则

(1) 使用POJO进行轻量级和最小侵入式开发。

(2) 通过依赖注入和基于接口编程实现松耦合

(3) 通过AOP和默认习惯进行声明式编程。

(4) 使用AOP和模板减少模块化代码。

Spring所有功能的设计和实现都是基于此四大原则的。每一个被Spring管理的Java对象都称为Bean

依赖注入

1、控制反转是通过依赖注入去实现的,依赖注入指的是容器负责创建对象和维护对象间的依赖关系,而不是通过对象本身负责自己的创建和解决自己的依赖。

2、依赖注入的主要目的是为了解耦

3、Spring IOC容器(ApplicationContext)负责创建Bean,并通过容器将功能类Bean注入到你需要的Bean中。

4、Spring提供使用xml配置、注解、java配置、groovy配置实现Bean的创建和注入。无论是xml配置、注解、Java配置,都被称为配置元数据,所谓元数据就是描述数据的数据。Spring容器解析这些配置元数据进行Bean的初始化、配置和管理依赖。

声明Bean的注解

@Component组件,没有明确的角色。

@Service 在业务逻辑层(Service层)使用

@Repository 在数据访问层(dao层)使用

@Controller 在展现层(MVC-SpringMVC)使用

注入Bean的注解

一般情况下通用

@Autowired:Spring提供的注解。

@Inject:JSR-330提供的注解

@Resource:JSR-250提供的注解。

这些注解在set方法上或者属性上使用,但是建议在属性上使用,优点是代码更少、层次更清晰。

代码示例

(1)首先声明一个Person的Bean



说明:使用@Service注解声明当前的person类是Spring管理的一个Bean,其中使用@Component、@Service、@Repository、@Controller注解是等效的。

(2)在声明一个Student的Bean



说明:使用@Autowired注解Person类注入到Student这个Bean中,是为了让Student这个bean也具备Person类的功能。

(3)声明一个配置类



说明:@Configuration声明当前类是一个配置类。使用@ComponentScan("bean")自动扫描包名下所有使用@Service、@Component、@Repository和@Controller的类,并注册为Bean

(4)编写运行代码



说明:使用
AnnotationConfigApplicationContext
作为Spring容器,接受输入一个配置类作为参数。

运行结果:



Java配置

基本概念

Java配置是Spring4.x推荐的配置方式,可以完全替代xml配置,Java配置也是Spring boot推荐的配置方式

Java配置是通过@Configuration和@Bean来实现的。@Configuration声明当前类是一个配置类,相当于一个Spring配置的xml文件。@Bean注解在方法上,声明当前方法的返回值为一个Bean

什么时候使用Java配置,什么时候使用注解配置,我们主要的原则是:全局配置使用Java配置(如数据库相关配置、MVC相关配置),业务bean的配置使用注解配置(@Service、@Component、@Repository、@Controller)。

代码示例

首先声明一个类Fruit



再声明一个类Apple



声明一个配置类Config



编写测试类




AOP

基本概念

AOP:面向切面编程,相对于OOP面向对象编程。

Spring的AOP存在目的是为了解耦。AOP可以让一组类共享相同的行为。在OOP中只能通过继承类和实现接口来使代码的耦合度增强,且类继承只能为单继承,阻碍更多行为添加到一组类上,AOP弥补了OOP的不足

Spring支持AspectJ的注解式切面编程

(1)使用@Aspect声明一个切面

(2)@After、@Before、@Around定义建言(advice),可直接将拦截规则(切点)作为参数

(3)其中@After、@Before、@Around参数的拦截规则为切点(PonitCut),为了使切点复用,可使用@PointCut注解专门定义拦截规则,然后在@After、@Before、@Around的参数中调用。

(4)其中符合条件的每一个被拦截处连接点(joinpoint)。

代码示例

(1)添加spring aop支持及AspectJ依赖



(2)编写拦截规则的注解



(3)编写使用注解的被拦截类



(4)编写切面



说明:

1、通过@Aspect注解声明一个切面

2、通过@Component让此切面成为Spring容器管理的Bean

3、通过@Pointcut注解声明切点

4、通过@After注解声明一个建言,并使用@Ponitcut定义的切点成为参数。

5、通过反射获得注解上的属性,然后做日志记录相关的操作。

(5)编写配置类



说明:使用@EnableAspectJAutoProxy注解开启Spring对AspectJ的支持

(6)编写运行类



结果:



说明:先执行方法中的代码,然后再执行注解中的代码

Spring容器

基本概念

容器可以管理对象的生命周期,对象与对象之间的依赖关系,您可以使用一个配置文件(通常是XML),在上面定义好对象的名称、如何产生(Prototype 方式或Singleton 方式)、哪个对象产生之后必须设定成为某个对象的属性等,在启动容器之后,所有的对象都可以直接取用,不用编写任何一行程序代码来产生对象,或是建立对象与对象之间的依赖关系,这也正是使用Spring框架给我们带来的好处。

Spring核心容器

下面的Spring主要接口设计关系图:



1、从接口BeanFactory到HierarchicalBeanFactory,再到ConfigurableBeanFactory,这是一条主要的BeanFactory设计路径。

BeanFactory接口定义了基本的Ioc容器的规范,在这个接口定义中,包括了getBean()这样的Ioc容器的基本方法(通过这个方法可以从容器中取得Bean)。

通过这些接口设计的叠加,定义了BeanFactory接口就是最简单的Ioc容器的基本功能。

2、以ApplicationContext作为核心的接口设计,这里涉及的主要接口设计

有,从BeanFactory到ListableBeanFactory,再到ApplicationContext,再到我们常用的WebApplicationContext或
ConfigurableApplicationContext接口。对于ApplicationContext接口,它通过继承MessageSource、ResourceLoader、ApplicationEventPublisher接口,在BeanFactory简单Ioc容器的基础上添加了许多对高级容器的特性支持。

3、这个接口系统是以BeanFactory和ApplicationContext为核心设计的,而BeanFactory是Ioc容器中最基本的接口。

4、BeanFacotry是Spring中比较原始的Factory。它无法支持spring的许多插件,如AOP功能、Web应用等。ApplicationContext接口,它由BeanFactory接口派生而来,因而提供BeanFactory所有的功能。ApplicationContext以一种面向框架的方式工作以及对上下文进行分层和实现继承。ApplicationContext还提供了以下的功能:

(1)MessageSource, 提供国际化的消息访问

(2)资源访问,如URL和文件

(3)事件传播

(4)载入多个(有继承关系)上下文 ,使得每一个上下文都专注于一个特定的层次,比如应用的web层。

BeanFactory采用的是延迟加载形式来注入Bean的,即只有在使用到某个Bean时(调用getBean()),才对该Bean进行加载实例化,这样我们就不能发现一些存在的Spring的配置问题。而ApplicationContext则相反,它是在容器启动时,一次性创建了所有的Bean,这样在容器启动时,我们就可以发现Spring中存在的配置错误。

AnnotationConfigApplicationContext类

使用
AnnotationConfigApplicationContext可以实现基于Java的配置类加载Spring的应用上下文,避免使用application.xml进行配置。在使用spring框架进行服务端开发时,个人感觉注解配置在便捷性和操作上都优于使用XML文件进行配置。

代码示例

(1)定义一个接口Output



(2)定义一个实现类


(3)定义一个配置类

(4)测试


结果:


Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表