1、Spring框架中标签的配置
1) id属性和name属性的区别
* id --- Bean起个名字,在约束中采用ID的约束,唯一
取值要求:必须以字母开始,可以使用字母、数字、连字符、下划线、句号、冒号,id:不能出现特殊字符
* name --- Bean起个名字,没有采用ID的约束
取值要求:name可以出现特殊字符。如果<bean>中没有id的话,name可以当作id使用
Spring框架在整合Struts1框架的时候,Struts1的框架的访问路径是以/开头的,例如:/saveAction
2) class属性:Bean对象的全路径
3) scope属性:scope属性代表Bean的作用范围
* singleton :单例(默认值)
* prototype :多例,在Spring框架整合Struts2框架的时候,Action类也需要交给Spring做管理,配置把Action类配置成多例!!!
* request :应用在Web项目中,每次HTTP请求都会创建一个新的Bean
* session :应用在Web项目中,同一个HTTP Session共享一个Bean
* globalsession :应用在Web项目中,多服务器间的session
4) Bean对象的创建和销毁的两个属性配置
* 说明:Spring初始化bean或销毁bean时,有时需要做一些处理工作,因此Spring可以在创建和拆卸bean的时候调用bean两个生命周期方法
* init-method:当bean被载入到容器的时候调用init-method属性指定的方法
* destroy-method:当bean从容器中删除的时候调用destroy-method属性指定的方法
* 想看destroy-method的效果,有如下条件
* scope = singleton有效
* web容器中会自动调用,但是main函数或测试用例需要手动调用(需要使用ClassPathXmlApplicationContext的close()方法)
2、依赖注入(DI)
1)IoC 和 DI 的概念
* IoC : Inverse of Control,控制反转,将对象的创建权反转给Spring!!!
* DI : Dependency Injection,依赖注入,在Spring框架负责创建Bean对象时,动态的将依赖对象注入到Bean组件中!!!!
2)DI(依赖注入)
* 例如:如果UserServiceImpl的实现类中有一个属性,那么使用Spring框架的 IoC 功能时,可以通过依赖注入把该属性的值传入进来
UserServiceImpl代码:
public class UserServiceImpl implements UserService {
private String name;
public void setName(String name) {
this.name = name;
}
public void sayHello() {
System.out.println("Hello Spring... " + name);
}
}
applicationContext配置:
<?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标签,依赖注入 -->
<bean id="userService" class="com.jadan.demo1.UserServiceImpl">
<property name="name" value="小凤"></property>
</bean>
</beans>
3、Spring框架的属性注入
* 对于类成员变量,常用的注入方式有两种:
> 构造函数注入
> 属性setter方法注入
* 在Spring框架中提供了前两种的属性注入方式
方式一:构造方法的注入方式,两步
> 编写Java的类,提供构造方法
/**
* 演示构造方法注入的方式
*/
public class Car1 {
private String cname;
private Double price;
public Car1(String cname, Double price) {
this.cname = cname;
this.price = price;
}
public String toString() {
return "Car1 [cname=" + cname + ", price=" + price + "]";
}
}
> 编写配置文件
<?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="car1" class="com.jadan.demo4.Car1">
<!-- <constructor-arg name="cname" value="宝马"></constructor-arg>
<constructor-arg name="price" value="400000"></constructor-arg>
-->
<constructor-arg index="0" value="奥迪"></constructor-arg>
<constructor-arg index="1" value="1200000"></constructor-arg>
</bean>
</beans>
方式二:属性的setter方法的注入方式
> 编写Java的类,提供属性和对应的set方法
public class Car2 {
private String cname;
private Double price;
public void setCname(String cname) {
this.cname = cname;
}
public void setPrice(Double price) {
this.price = price;
}
public String toString() {
return "Car2 [cname=" + cname + ", price=" + price + "]";
}
}
> 编写配置文件:
<?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="car2" class="com.jadan.demo4.Car2">
<property name="cname" value="卡车"></property>
<property name="price" value="100000"></property>
</bean>
</beans>
* 如果Java类的属性是另一个Java的类,需要怎么注入值????
> <property name="name" rel="具体的Bean的ID或者name的值" />
例:
CustomerServiceImpl:
public class CustomerServiceImpl {
// 提供成员属性,提供set方法
private CustomerDaoImpl customerDao;
public void setCustomerDao(CustomerDaoImpl customerDao) {
this.customerDao = customerDao;
}
public void save() {
System.out.println("我是业务层的save...");
// 原来编写的方式
// new CustomerDaoImpl().save();
// Spring的方式
customerDao.save();
}
}
CustomerDaoImpl:
public class CustomerDaoImpl {
public void save() {
System.out.println("我是持久层的save...");
}
}
applicationContext:
<?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="customerService" class="com.jadan.demo3.CustomerServiceImpl">
<property name="customerDao" ref="customerDao"></property>
</bean>
<bean id="customerDao" class="com.jadan.demo3.CustomerDaoImpl"></bean>
</beans>