Spring框架
Spring框架
Java应用最广泛的框架,它的成功来源于理念,而不是技术本身
- IOC:控制反转
- AOP:面向切面编程
- DI:依赖注入
非侵入式设计:
不需要继承框架提供的任何一个类,即使跟换框架,代码也不需要大改。
JavaBean
SpringBean是JavaBean的扩展,现在的JavaBean作为一个对象,提供set、get方法
SpringBean只需要为接收设置值注入set方法
Spring优势:
- 低侵入
- 声明式事务
- 方便继承其他框架
- 提供了Javaweb三层的每一层的解决方案
Spring能帮我们干什么?:
装修:
1.自己干 ×
2.找装修公司 √
IOC容器:
控制反转
可以把对象放进容器中,交给Spring去管理,并且还是单例的
把对象放进容器中,对象一旦放入容器中,这个对象在我当前的项目中就可以共享,而且默认还是单例的
id:这个对象在IOC容器中的唯一标识
class:要放到spring的IOC容器中的全类名
<bean id="user" class="com.jsoft.entity.User">
把容器中的对象拿出来
public void IOCTest() {
加载Spring配置文件
ApplicationContext ioc = new ClassPathXmlApplicationContext("application.xml");
这个user对象是从ioc容器中获取到的
User user = (User)ioc.getBean(User.class);
user.say();
System.out.println(user);
}
属性注入:
ref:依赖,当使用ref属性,依赖于当前容器中已经存在的bean,进行属性的注入
scope:定义bean的作用域
- prototype:原型
- singleton:单例(默认)
- request:一次请求
- session:一次会话
1.构造器注入:根据参数名,根据索引位置,根据参数类型
<bean id="user" class="com.jsoft.entity.User">
<constructor- arg value="jsoft" name="name"></constructor-arg>
</bean>
调用user类中的有参构造参数
2.setter注入:调用set方法来进行属性注入(常用)
<bean id="user" class="com.jsoft.entity.User">
<property name="name" value="JSOFT"></ property>
</bean>
更多复杂的setter注入
-
自定义的数据类型(address):
如果bean要注入的是一个对象,那这个对象也要先注册到IOC容器中 <bean id="address" class="com.jsoft.entity. Address"> <property name="info" value="高新区"></ property> </ bean> <bean id="user" class="com.jsoft.entity.User"> <property name="name" value="JSOFT"></ property> 依赖当前容器中存在bean来注入 <property name="address" ref="address"></property> </bean>
-
数组
<property name="hobbies"> <array value-type="java.lang.String"> <value>篮球</value> <value>足球</value> </array> </property>
-
List集合
<property name="duties"> <list value-type="java.lang.S <value>董事长</value> <value>总经理</value> </list> </property>
-
set集合
<property name="carts"> <set value-type="java.lang.String"> <value>韭菜</value> <value>鸡蛋</value> </set> </property>
-
Map集合
<property name="map"> <map> <entry key="父亲" value="马云"></entry> <entry key="母亲" value="张瑛"></entry> </map> </property>
-
Properties
<property name="properties"> <props> <prop key="阿里巴巴">达摩院</prop> </props> </property>
自动装配
autowire:自动装配
byName:根据属性名去IOC容器中找名字相同的bean进行自动注入
byType:根据属性的类型自动注入
<bean id="user" class="com.jsoft.entity.User" autowire="byName">
注解:自动装配
context: component-scan base-package="com.jsoft.entity"</context:component-scan>
并且在类中加上
@Autowirit
强制注解其他
@Qualifier ( " address1")
@Resource
Spring的bean生命周期:
1.构造器
2.注入
3.初始化
4.目标方法
5.销毁
懒初始化(延迟初始化、Servlet的初始化默认就是懒初始化)
而spring的IOC容器默认就不是懒初始化,只要spring的容器启动,所有的bean都会加载,都会初始化
AOP
- 面向切面编程,主要用来解决一些系统层面的问题,比如日志,事务,权限
- 在不改变元哦有的逻辑的基础上,增加游戏额额外的功能
- AOP是OOP(面向对象)补充和完善
- AOP横切技术,解剖开对象的内部,把一些和业务无关,都可以为业务共同的调用的逻辑封装起来,减少重复代码的使用。
通知:
增强处理(Advice),就是你想要的功能,日志,事务,权限,安全....
首先定义好,然后在想用的地方,Adivce配合Aspect的一段处理代码
连接点
JoinPoint
就是spring允许你通知的地方,一个service层的方法需要配置通知,获取这个方法的参数,方法名,返回值...
切入点(PointCutm)
一个类中有20个方法,让这20个方法中的15个在方法执行之前,执行之后或者抛出异常时干点什么,使用切入点表达式来筛选连接点。
切面
通知+切入点的结合。在什么个点上去干什么事。
织入
被通知的对象,真正的业务逻辑,可以毫不知情。两者互相之间可能并不知情,专注于自己该做的事。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】