介绍
Spring是一个开源框架,spring是一个轻量级的Java开发框架。一站式框架,核心是控制反转IOC和面向切面AOP
三层结构:
WEB层:springMVC
业务层:Bean管理(IOC)
持久层:spring的jdbc模板ORM模板用于整合其他的持久层框架
入门案例
userDAO类:
public interface UserDAO {
public void sayHello();
}
public class UserDAOImpl implements UserDAO {
@Override
public void sayHello() {
System.out.println("你好啊,spring");
}
}
配置文件:
<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="userDao" class="com.spring.dao.UserDAOImpl"/>
</beans>
测试类:
public void demo1(){
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("spring-config.xml");
UserDAO userDAO= (UserDAO) applicationContext.getBean("userDao");
userDAO.sayHello();
}
DI和IOC
Spring的相关配置
id和name属性
id:给bean起个名字,再约束中采用ID的约束
name:没有id约束,如果没有id可以将name作为id
scope属性
bean的作用范围
singleton:默认的,单例的
prototype:多例的
request:将对象存入request中
session:将对象存入session中
Bean的生命周期
通过配置
销毁方法想要执行,需要是单例创建的bean而且在工厂关闭的时候,bean才会被销毁
Spring生成Bean的时候三种方式
-
无参的构造方法的方式
<bean id="userDao" class="com.spring.dao.UserDAOImpl"/>
-
静态工厂实例化的方式
提供一个工厂类: public class BeanFactory { public static UserDAO getBean(){ return new UserDAOImpl(); } } <bean id="bean2" class="com.spring.dao.BeanFactory" factory-method="getBean"/>
-
实例工厂实例化的方式
提供bean的实例工厂: public UserDAO getBean2(){ return new UserDAOImpl(); } <bean id="beanFactory" class="com.spring.dao.BeanFactory"/> <bean id="bean3" factory-bean="beanFactory" factory-method="getBean2"></bean>
Spring的Bean的属性注入
-
构造方法的方式
<bean id="car" class="com.spring.dao.Car"> <constructor-arg name="name" value="很好"/> <constructor-arg name="price" value="10000"/> </bean>
-
set方法的方式注入属性
<bean id="car2" class="com.spring.dao.Car"> <property name="name" value="奥迪"/> <property name="price" value="1000"/> </bean>
-
对象类型的注入
<bean id="person" class="com.spring.dao.Person"> <property name="name" value="mike"/> <property name="car" ref="car2"/> </bean>
-
数组类型
<property name="addr"> <list> <value>北京</value> <value>南京</value> </list> </property>
-
List集合
<property name="phone"> <list> <value>123123</value> <value>324324</value> </list> </property>
-
Map集合
<property name="cla"> <map> <entry key="1" value="2班"></entry> </map> </property>
-
properties
<property name="account"> <props> <prop key="username">root</prop> <prop key="pwd">123</prop> </props> </property>