spring学习笔记
一:spring入门
1:新建java project,在项目名字下面建立lib,spring的jar包下载http://repo.spring.io/release/org/springframework/spring/
http://repo.spring.io/release/org/springframework/spring/4.0.0.RELEASE/
、
2:在applicationContext.xml文件中配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="SpringHello" class="com.wth.cn.SpringHello">(注意此处为类全名,是通过反射的方式创建对象的,所以必须在该类(SpringHello)中要有无参构造方法)
<property name="name2" value="小猫"></property>
</bean>
</beans>
3:在Main类中写
public static void main(String[] args){
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
SpringHello springHello = (SpringHello)ctx.getBean("SpringHello");
System.out.println(springHello.getName2());
// SpringHello springHello=new SpringHello();
// springHello.setName("小狗");
// System.out.println(springHello.getName());
}
二:IOC
1:IOC容器作用
三:用spring创建对象的方式
1:通过new 对象名字的方式即在application.xml
中配置
<bean id="employer" class="com.wth.cn.Employer">
<property name="name" value="慧"></property>
<property name="sex" value="女"></property>
<property name="salary" value="10000"></property>
//对存在特殊符号数据的赋值
<property name="address">
<value> <![CDATA[<henan^>]]></value>
</property>
//对list对象赋值
<property name="internships">
<list>
<bean class="com.wth.cn.Internships">
<property name="name" value="王慧"></property>
<property name="sex" value="女"></property>
<property name="salary" value="1000"></property>
</bean>
<ref bean="internship"/>
</list>
</property>
//为map赋值
<property name="carInfo">
<map>
<entry key="AA" value-ref="car1"></entry>
<entry key="BB" value-ref="car2"></entry>
</map>
</property>
//为properties属性赋值
<bean id="dataSource" class="com.wth.cn.DataSource">
<property name="properties">
<props>
<prop key="name">张三</prop>
<prop key="score">98</prop>
<prop key="dept">软件学院</prop>
</props>
</property>
</bean>
//传统的方式不能将list转为bean,但util命名空间可以实现,如此别的属性也可引用该cars属性。但是 util需要添加util命名空间文件,
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd">
<util:list id="cars">
<ref bean="car1"/>
<ref bean="car2"/>
</util:list>
为了方便赋值,可以用p,需要引入p的命名空间文件 xmlns:p="http://www.springframework.org/schema/p"
<bean id=“internetship” p:city="beijing" p:street="鼓楼大街">
</bean>
//为了引入外界文件,需要引入context的命名空间
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
xmlns:context="http://www.springframework.org/schema/context"
<context:property-placeholder location="db.properties"/>
//为级联属性赋值(注意属性需先初始化后才可以为级联属性赋值,否则会有异常,和structs2不同)
<property name="cadet" ref="internship"></property>
<property name="internship.name" value="刘校庆"></property>
</bean>
//bean的后置处理器
https://www.cnblogs.com/sishang/p/6576665.html
2:通过构造方法来创建对象(可用该种方式设置null)
<bean id="boss" class="com.wth.cn.Boss">
<constructor-arg > <null/></constructor-arg>
<constructor-arg value="8000"> </constructor-arg>
<constructor-arg value="男"> </constructor-arg>
<constructor-arg type="java.lang.String">
<value> <![CDATA[<henan^>]]></value>
</constructor-arg>
<constructor-arg type="int">
<value> 25</value>
</constructor-arg>
//为级联属性赋值(注意属性需先初始化后才可以为级联属性赋值,否则会有异常,和structs2不同)
<constructor-arg ref="car"></constructor-arg>
<property name="car.name" value="宝马"></property>
</bean>
3:通过静态工厂方式创建对象
我的总结:实际上就是在一个类A中创建一个static方法,该static方法·可以获取一个对象B,可以通过p:方式给B对象赋值,也可以通过property方式直接配置属性的值,还可以通过
<constructor-arg value="nv"></constructor-arg>方式给static方法传入参数。
class属性:指向静态工厂方法的全类名
factory-method:指向静态工厂方法的名字
constructor-arg:如果工厂方法需要传入参数,则使用constructor-arg来配置参数。
<!-- 静态工厂获取bean -->
<bean id="person"
class="com.wth.ceateBean.StaticCarfactory"
factory-method="getPerson" >//调用这个静态方法可以直接
<!-- <constructor-arg value="nv"></constructor-arg> -->
<property name="name" value="张三"></property>
</bean>
4:实例方法创建对象
<bean id="instance" class="com.wth.ceateBean.InstanceCarFactory"></bean>
<bean id="person1"
class="com.wth.ceateBean.InstanceCarFactory"
factory-method="getP"
factory-bean="instance"
>
<constructor-arg value="地下" ></constructor-arg>
</bean>
5:aop的使用https://www.cnblogs.com/qinglangyijiu/p/8425653.html