1.Spring简介: Spring 是一个分层的,轻量级框架,其核心是 IOC(控制反转) 和 AOP(面向切面)
2.Spring 环境搭建:
导包:
创建 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-2.5.xsd">
<!--
bean: 将一个类的对象创建的过程交给spring容器
id: 唯一标识
class: 指定类的具体路径(类全名)
-->
<bean id="user" class="cn.java.entity.User"></bean>
</beans>
启动框架:
public class TestSpring {
public static void main(String[] args) {
// 启动Spring框架
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
}
}
3.Spring 之 DI: 依赖注入
对象的属性赋值:
通过构造方法赋值:
<?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-2.5.xsd">
<bean id="user" class="cn.java.lhy.entity.User">
<!-- User类中的属性按顺序分别为username,password,且有构造方法User(String username,String password) -->
<constructor-arg index="0" type="java.lang.String" value="admin"></constructor-arg>
<constructor-arg index="1" type="java.lang.String" value="root"></constructor-arg>
</bean>
</beans>
通过 get/set 方法赋值:
<?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-2.5.xsd">
<bean id="user" class="cn.java.lhy.entity.User">
<!-- 如果不是指向对象,直接用value设置值即可 -->
<!-- 设置对象用ref,普通属性用value -->
<property name="username" value="admin"></property>
<property name="password" value="root"></property>
</bean>
</beans>
对List、Set、Map以及properties属性赋值:
<?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-2.5.xsd">
<bean id="person" class="cn.java.entity.Person">
<!-- 普通属性赋值 -->
<property name="name" value="admin"></property>
<!-- list属性赋值 -->
<property name="list">
<list>
<value>中国</value>
<value>one</value>
<!--
可以通过 ref 标签,将其他对象添加到list集合中,bean书写对象名
<ref bean="student" />
-->
</list>
</property>
<!-- set属性赋值(与list相似) -->
<property name="set">
<!-- set不可重复,重复不添加,所以只有第一个 one 值 -->
<set>
<value>one</value>
<value>one</value>
</set>
</property>
<!-- map属性赋值(存放键值对) -->
<property name="map">
<!-- map中 key 不可重复,重复key不添加,value覆盖 -->
<map>
<entry key="name" value="张三"></entry>
<entry key="age" value="18"></entry>
</map>
</property>
<!-- properties属性赋值 -->
<property name="props">
<props>
<prop key="driver">com.mysql.jdbc.Driver</prop>
</props>
</property>
</bean>
</beans>
4.Spring 之 IOC:
控制反转,即将对象的创建、销毁、初始化等一系列的生命周期的过程交给spring容器来处理
<?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-2.5.xsd">
<!--
bean: 将一个类的对象创建的过程交给spring容器
id: 唯一标识
class: 指定类的具体路径(类全名)
-->
<bean id="user" class="cn.java.entity.User"></bean>
</beans>
public class Window {
public static void main(String[] args) {
// 启动Spring框架 等价于 ==> User user = new User();
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
// 获取spring容器中创建的对象(通过id值获取)
User user = (User)context.getBean("user");
}
}
scope: 控制对象在spring容器中的创建方式
<!--
scope:
常用值:
singleton(单例): 创建时只存在一个实例,默认值
prototype(多例): 输出prototype的bean对象时,每次都会重新生产一个新的对象给请求方
-->
<bean id="user" class="cn.java.entity.User" scope="singleton"></bean>
生命周期: init-method、destory-method
<!-- userService类中有init、destroy方法 -->
<!--
init-method: 用于设置初始化的方法
destroy-method: 用于设置销毁资源的方法
-->
<bean name="userService" class="cn.java.service.UserService" init-method="init" destroy-method="destroy"></bean>
迟加载: lazy-init
<!--
lazy-init: 是否以懒加载的方式创建对象
true/default: 以懒加载的方式创建对象,即用到对象时才创建对象
false: 非懒加载,spring容器启动立刻就创建对象
-->
<bean id="user" class="cn.java.entity.User" lazy-init="false"></bean>
自动装配: autowire
进行对象注入的时候有
set 方法注入: <property name="userDao" ref="userDao" />
构造方法注入: <constructor-arg><ref bean="userDao" /></constructor-arg>
现通过autowire进行注入:
<!--
注入的对象,必须有无参构造
autowire:
byName: 根据 setter 方法名进行匹配,如果找不到,就不赋值
byType: 根据 setter 方法的参数列表中的数据类型进行匹配
-->
<!--
已知UserService类中有setUserDao方法
如 使用byName,对于 setUserDao 方法,就会找 bean 中 id 值为userDao,如果此时id值为UserDao,则set方法找不到相匹配的(区分大小写)
-->
<bean id="userDao" class="cn.java.dao.impl.UserDaoImpl"></bean>
<bean id="userService" class="cn.java.service.UserService" autowire="byName"></bean>
<!--
如 Service类中有 setUserDao(UserDao userDao) 方法,就会找UserDao(如果xml中出现多个相同类型的对象,会报错),如果参数类型时接口,就会找对应的实现类对象
-->
<bean id="userDao" class="cn.java.dao.impl.UserDaoImpl"></bean>
<bean id="userService" class="cn.java.service.UserService" autowire="byType"></bean>