写在前面
很久以前在有道云笔记上写的笔记,打算放弃它了,将笔记迁移到这里来。文章可能还有很多不足,请大家谅解,欢迎大佬提意见。
本文使用到的东西
- spring
- java
1 spring的概述
因为spring基于反射原理,在使用spring框架的对象类中要存在默认的没有参数的构造函数。
spring 是一个非常著名的实现ioc对象控制反转及aop切面编程的框架。
通常将spring框架作为大型企业项目的“粘合剂”,让大型项目更容易维护(修改和扩展)。
ssh:struts web层, hiberante数据层,spring 中间层。
ioc:inversion of control。编程思想。
控制反转:项目中使用到的对象,不是由程序员自己去创建,而是交由对象工厂创建,程序员用到时才去拿。
用了IOC技术后,屏蔽对象创建的细节,让对象间的装配关系更灵活。
di:dependency injection。依赖式注入是spring对于ioc编程思想的技术实现。
持有抽象,注入实例。
2、spring配置文件头(基于spring4.0库)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
">
在这里写配置文件内容
</beans>
3、基础标签及其属性
3.1标签-引入其他配置文件
- import标签用于引入其他spring配置文件内容
- 该标签放在根beans标签内
- 该标签包含一个resource属性,用于写引入的配置文件的位置
示例:
<beans>
<import resource="applicationContext_复杂对象.xml"/>
</beans>
3.2标签-配置对象
- 该标签用于配置java对象类,放在根beans标签内
- id属性:id属性指定该对象的id,在java类中getBean方法可以通过id取得该对象
- class属性:指定该bean对应的java对象类
- lazy-init属性:是否懒创建,默认false。即创建工厂时就自动创建对象。懒创建为使用时创建
- scope属性:表示bean的生命周期,默认为singleton-单例(只创建一次)。
- prototype-原型,即用到时new(单例只能懒创建)。request--和request生命周期相同,session-和ssesion生命周期相同。
- autowired属性:自动装配属性的值,
- no ——默认情况下,不自动装配,通过“ref”手动设定属性。
- byName ——如果配置文件上方匹配到id和对应属性名相同的bean,则自动将该bean装填入属性,如果属性类型无法匹配则会报错。
- byType ——如果配置文件上方匹配到属性类型与对应属性相同的bean,则自动将该bean装填入属性。如果有多个类型相同的bean则报错。
- constructor ——根据构造函数参数的数据类型,进行byType模式的自动装配。
- autodetect ——如果发现默认的构造函数,用constructor模式,否则,用byType模式。
示例1:
--将com.etc.Planejava对象类添加到对象工厂id为prototype的bean,并指定为原型,每new一次都要创建一次
<!-- 创建1个plane的对象 -->
<bean id="plane" class="com.etc.Plane" scope="prototype">
</bean>
示例2:
--将com.etc.Supermanjava对象类添加到对象工厂id为superman的bean,通过构造方法配置name和age两个属性,其他属性按byName自动获取。
<!-- todo 创建1个超人 -->
<bean id="superman" class="com.etc.Superman" autowire="byName">
<!-- <property name="tool" ref="bird"/> --> <!-- 设值注入 -->
<!-- <property name="name" value="老白"/> --> <!-- 设值注入 -->
<constructor-arg type="java.lang.String" value="老白">
</constructor-arg>
<constructor-arg type="int" value="18">
</constructor-arg>
</bean>
3.3-构造函数
- 该标签用于调用java类对象中的构造方法,在
对象标签中定义,如果对象类中不存在指定参数的构造方法则将报错 - name属性:用于指定对象类中对应的属性名,该标签调用的是对象的构造方法,按理name指的应该是构造方法的参数,不是对象类的属性(未实验)
- type属性:在type中填写装箱的数据类型,否则报错,一般可以不用配置
- value属性:该属性用于指定name设置的属性对应的值
- ref属性:填写其他bean的id,该标签可以引用其他bean做为该name设置的属性对应的值
示例:
<constructor-arg name="age" type="int" value="18">
</constructor-arg>
<constructor-arg name="tool" ref="tool">
</constructor-arg>
- 该标签调用的是对象的构造方法,按理name指的应该是构造方法的参数,不是对象类的属性(未实验)
- 在配置了type属性之后,如果类型的属性只有一个,可以不用name指定对应的Java类属性
3.4-设置属性的值
- 该标签用于调用java类对象中指定属性的set方法,在
对象标签中定义,如果对象类中不存在指定的属性则将报错 - name属性:用于指定对象类中对应的属性名,不可省略
- value属性:该属性用于指定name设置的属性对应的值
- 填写其他bean的id,该标签可以引用其他bean做为该name设置的属性对应的值
示例:
<property name="tool" ref="bird"/>
<property name="name" value="老白"/>
4、在java类中读取使用sprig配置、取得对象
//1 读取applicationContext.xml文件,创建1个对象工厂
BeanFactory fac = new ClassPathXmlApplicationContext("applicationContext.xml");
//2 使用class类来拿出对象
//IFly p1_2 = fac.getBean(Plane.class);
//2 通过id从工厂中拿出对象,指定为IFly.class类型
IFly p1 = fac.getBean("plane",IFly.class);
//3 取得的对象可以正常使用
p1.fly();
5.总结
很久以前在有道云笔记上写的笔记,打算放弃它了,将笔记迁移到这里来。有不清楚的地方欢迎评论留言,看到的我都会回复的。本文到此结束,有什么不足的地方请大家不吝指正。