网站首页 > 博客文章 正文
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)测试
结果:
猜你喜欢
- 2025-07-23 Spring IoC Container 原理解析(spring中ioc的作用与原理)
- 2025-07-23 Spring之底层架构核心概念解析(spring底层设计模式)
- 2025-07-23 深入理解 JSR 303:数据校验在 Spring Boot 中的应用
- 2025-07-23 Springboot集成Kafka原理(kafka结合springboot)
- 2025-07-23 Spring如何加载「IOC容器」以及「装载Bean」源码解读
- 2025-07-23 Spring Security 自动踢掉前一个登录用户,一个配置搞定
- 2025-07-23 Spring Boot 控制反转(IoC)全面解析:从基础到高级实践
- 2025-07-23 spring cloud Alibaba参考的中文文档
- 2025-07-23 Spring Boot执行过程(执行springboot的jar)
- 2025-07-23 SpringBoot中6种拦截器使用场景(springboot拦截器放行)
你 发表评论:
欢迎- 最近发表
-
- 谷歌云推出印度尼西亚“BerdAIa for Security”网络安全计划
- 谷歌:已解决全球服务中断问题,受影响平台涉及Spotify、Discord等
- 不再单一依赖英伟达,OpenAI被曝开始租用谷歌AI芯片训练ChatGPT
- 谷歌云代理商:怎样通过谷歌云服务器搭建社交平台?
- 谷歌云服务遭遇全球性宕机,影响多家互联网巨头
- OpenAI正式将谷歌云纳入供应商名单
- 谷歌给Agent造了个“微信”,和MCP功能互补,多智能体协作更顺畅了
- OpenAI“去微软化”加速:最新引入谷歌(GOOGL.US)构建混合云生态
- 谷歌给Agent造了个“微信”,和MCP功能互补,多智能体协作更顺畅
- 谷歌与OpenAI携手:云合作背后的机遇与隐忧
- 标签列表
-
- ifneq (61)
- 字符串长度在线 (61)
- googlecloud (64)
- flutterrun (59)
- 系统设计图 (58)
- powershellfor (73)
- messagesource (71)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- qcombobox样式表 (68)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)