Spring:IOC之一
- Spring是轻量级的开源的JavaEE框架
- Spring解决企业应用开发的复杂性
- Spring两个核心:IOC和AOP
- IOC:控制反转:把创建对象交给Spring来管理
- AOP:面向切面编程:不修改源代码进行功能的增强。
- 特点
- 方便解耦,简化开发
- AOP编程的支持
- 方便程序的测试
- 方便集成各种优秀的框架
- 方便进行事务的管理
- 降低API的开发难度
- 通过Spring5进行学习
-
通过Spring5的方法创建对象
-
创建Spring配置文件,在配置文件中创建对象
<bean id="user" class="com.boerk.spring5.User"></bean>
//1.加载配置文件 ApplicationContext context = new ClassPathXmlApplicationContext("Bean.xml"); //2.通过context获取配置文件的对象(反射) User user = context.getBean("user", User.class);
-
IOC容器
-
IOC底层原理
- IOC:控制反转。把对象创建和对象之间的调用过程,交给Spring管理
- 目的:为了耦合度降低。
- 如上进行的入门案例就是基于IOC实现的
- IOC底层原理:
- xml解析
- 工厂模式
- 反射
- 实现原理:
- 通过工厂模式,在工厂类中获得需要的对象
- 工厂类中,通过xml解析获得class的属性值
String classValue=...
- 通过反射创建对象
Class clazz = Class.forName(classValue)
- 返回对象
return(User)clazz.newInstance()
- 在工厂模式的基础上,进一步降低耦合度。
-
IOC接口(BeanFactory)
- IOC思想基于IOC容器完成的,IOC容器底层就是对象工厂
- Spring提供了两种IOC容器的实现方式(两个重要的接口)
- BeanFactory:IOC容器基本实现,是Spring内部使用的接口不提供给开发人员使用。
- 加载配置文件
ApplicationContext context =new ClassPathXmlApplicationContext("Bean.xml");
使不会立即创建对象,在获取对象(User user = context.getBean("user", User.class)
)时才会去创建对象
- 加载配置文件
- ApplicationContext:是BeanFactory的子接口,提供了更强大的功能,一般是由开发人员使用的。
- 加载配置文件时就已经创建了对象。
- ApplicationContext的两个实现类ClassPathXmlApplicationContext和FileSystemXmlApplicationContext,分别对应工程内的路径和磁盘上的路径。
- BeanFactory:IOC容器基本实现,是Spring内部使用的接口不提供给开发人员使用。
-
IOC操作Bean管理(基于xml)
- 由Spring来创建对象
- 由Spring来注入属性
- Bean管理的两种方式
- xml配置文件
- 注解的方式
-
IOC操作Bean管理(基于注解)
-
创建对象
<bean id="user" class="com.boerk.spring5.User"></bean> <!-- id:你对象的表示 class:你创建对象的全路径 name:与id类似,里面可以加特殊符号。 -->
- 执行无参构造,去完成对象的创建。如果声明了有参却没有声明无参构造则会报错。
-
注入属性
- DI:依赖注入,就是注入属性
-
创建对应的对象
<bean id="user" class="com.boerk.spring5.User"></bean>
-
set方法的注入
<bean id="user" class="com.boerk.spring5.User"> <property name="bname" value="五年高考三年模拟"></property> </bean> <!-- name:类里面属性的名称 value:对应属性的值 -->
-
使用有参构造注入
-
创建实体类的有参构造方法
-
创建实体类对象
-
使用有参构造器
<constructor-arg name="userName" value="Boerk"></constructor-arg> <!-- name:类里面属性的名称 value:对应属性的值 -->
-
-
p名称空间注(了解)
-
添加一个p名称精简在配置文件中
-
进行属性的注入。
<bean id="user" class="com.boerk.spring5.User" p:name="hello">
-
-
使用xml配置文件完成其他类型的属性的注入
-
设置空值
- 在property中再加一个
<null>
标签
- 在property中再加一个
-
属性值包含特殊符号
-
使用转义字符
-
把特殊符号的内容加到CDATA里面去
<value><![CDATA[<<南京 >>]]></value>
-
-
属性为外部对象的
- 在配置文件中
<property>
中使用ref代替value,ref的value为你创建的其他bean对象的id
- 在配置文件中
-
属性为内部对象的
-
在配置文件中,给一个对象注入属性的时候,嵌套一个对象的创建,则该对象为一个内部对象。
<property name="department"> <bean id="dept" class="com.boerk.spring5.bean.Department"> </bean> </property>
-
-
级联赋值
-
外部对象时其实就是第一种级联赋值
-
通过生成对象(get)在通过对象.属性的方式赋值
<bean id="emp" class="com.boerk.spring5.bean.Emp"> <property name="ename" value="Boerk"></property> <property name="gender" value="女"></property> <property name="department" ref="dept"></property> <property name="department.dename" value="财务部"></property> </bean> <bean id="dept" class="com.boerk.spring5.bean.Department"></bean>
-
FactoryBean
Spring里有两种Bean
-
普通的Bean
- 在配置文件中定义什么类型就返回什么类型
-
工厂Bean
- 在配置文件中定义的类型可以和返回的类型不一样。
-
创建一个类,去实现工厂bean的接口,FactoryBean
-
重写getObject方法,修改返回值类型即可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)