Spring程序的步骤
xxx.java调用Spring.getBean(ID标识)
然后Spring框架去XML配置文件中获得ID标识对应的Bean类名
然后通过反射创建ean对象。返回对象
在Spring配置文件中。
<bean id="Helloclass" class="HelloWorld" scope="prototype">
scope取值为singleton时
Bean只会实例化一个类
并且在ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
加载配置文件时。就实例化了类
容器在。对象就一直在
应用卸载。对象被销毁
scope取值为prototype时
Bean会实例化多个类
在HelloWorld hello = (HelloWorld) context.getBean("Helloclass");
获取Bean才会实例化类
对象在使用中。就会存活
对象不用。就会销毁
指定初始化方法和销毁方法
在配置文件中添加
init-method="init" destroy-method="destory"
在实现类中添加对应的init函数和destory函数。就能在类初始化和销毁时执行函数
工厂静态方法实例化
就是将某个函数如下编写
public static 类名 class(){
return new 类名();
}
在spring配置文件中。
<bean id="User" class="HelloWorld" factory-method="save" />
这样。在查找User类的时候。就会通过HelloWorld类中的save方法查找
工厂实例方法实例化
<bean id="UserDaoDemo" class="UserDaoDemo" init-method="init" destroy-method="destory" />
<bean id="test" factory-bean="UserDaoDemo" factory-method="save" />
就是执行一个类名和方法名
导入其他配置文件
<import resource="applicationContext-user.xml" />
<import resource="xxxxxxxxxx.xml" />
依赖注入:
比如现在。我有一个UserDao接口。然后UserDaompl类去实现接口
UserService接口。UserServicempl类去实现接口
这里UserServicempl类。想要调用UserDaompl类中的save方法。输出字符串。
定义了一个set方法。然后UserServicempl类的save()方法。调用this.UserDaompl的save()方法
这就存在依赖问题。我们可以在配置文件中。直接把定义的类当作参数传入
<bean id="UserDao" class="UserDaompl" />
<bean id="UserService" class="UserServicempl">
<property name="userDaompl" ref="UserDao"></property>
</bean>
一个UserService标识。对应UserServicempl类
然后userDaompl对应set方法的参数类型。然后传入参数是UserDao
利用p属性构造依赖
<?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:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="UserDao" class="UserDaompl" />
<bean id="UserService" class="UserServicempl" p:userDaompl-ref="UserDao"></bean>
</beans>
前面添加一个xmlns:p="http://www.springframework.org/schema/p"
后面直接加上p:set函数名-ref="参数"
利用构造函数依赖
public class UserServicempl implements UserService{
private UserDaompl UserDaompl;
public UserServicempl(){}
public UserServicempl(UserDaompl UserDaompl){
this.UserDaompl = UserDaompl;
}
@Override
public void save() {
UserDaompl.save();
}
}
然后spring-config.xml配置如下
<bean id="UserService" class="UserServicempl">
<constructor-arg name="UserDaompl" ref="UserDao"></constructor-arg>
</bean>
UserDaompl是参数名。UserDao传入的标识符
之前我们注入的一直是对象。
现在来注入点字符串。数字
还是原来的类。只不过我们添加了
private String Name;
public void setName(String name) {
Name = name;
}
public void setAge(int age) {
Age = age;
}
private int Age;
最后我们配置spring-config.xml
<bean id="UserService" class="UserServicempl">
<property name="Age" value="19" />
<property name="Name" value="Guoke" />
</bean>
<property>里面写构造函数的参数。后面跟值
配置集合数据类型
private List<String> strList;
private Map<String,User> userMap;
private Properties properties;
public void setStrList(List<String> strList) {
this.strList = strList;
}
public void setUserMap(Map<String, User> userMap) {
this.userMap = userMap;
}
public void setProperties(Properties properties) {
this.properties = properties;
}
spring-config.xml配置
<bean id="UserService" class="UserServicempl">
<!--这里是List的配置方式-->
<property name="strList">
<list>
<value>abc</value>
<value>fdfddf</value>
<value>xx</value>
</list>
</property>
<!--这里是Usermap的配置方式。最后面定义了两个类。分别给了两个标识。并且set函数存入数据-->
<property name="userMap">
<map>
<entry key="user1" value-ref="User1"></entry>
<entry key="user2" value-ref="User2"></entry>
</map>
</property>
<!--这里是properties的配置方式。props内部还有prop-->
<property name="properties">
<props>
<prop key="a1">pp1</prop>
<prop key="a2">pp2</prop>
</props>
</property>
</bean>
<bean id="User1" class="User">
<property name="addr" value="shaoxing"></property>
<property name="name" value="guoke"></property>
</bean>
<bean id="User2" class="User">
<property name="addr" value="lishui"></property>
<property name="name" value="xxx"></property>
</bean>
Spring相关的API
AplicationContext的实现类
ClassPathXmlApplicationContext
从类的根路径加载配置文件
FileSystemXmlApplicationContext
从磁盘路径加载配置文件
AnnotationConfigApplicationContext
用注解配置容器。需要使用此类
getBean() 方法使用
之前我们获取class都是用ID对应xml中的class获取的
这里getBean复写了。可以用类型获取
UserService user = app.getBean(UserService.class);