Spring概述
Spring是一个轻量级的框架,主要有**IOC(控制反转 )和AOP(面向切面)**两大核心内容。简化了开发,降低了开发的复杂度,同时可以整合其他的优秀的第三方框架或者类库,目前在大多数公司中都比较流行。
spring的优势
- 降低了开发的复杂度
- 整合目前流行的优秀的第三方的框架或类库
- 整合Junit进行单元测试
Spring的体系结构
Spring中的两大核心
IOC
控制反转IOC:将对象的创建和管理交给Spring框架处理
依赖注入DI:在程序运行期间,动态的将值进行注入
IOC案例
步骤:
1. 引入Spring所需要的jar包 beans context core spel(Exepression) +jcl
2. 创建实体类及dao层
3. 创建applicationContext.xml文件配置
4. 读取容器创建实例对象
<bean id="userDao" class="cn.yunhe.dao.impl.UserDaoImpl"></bean>
/*UserDaoImpl userDao = new UserDaoImpl();
userDao.saveUser();
userDao.delUser();*/
//读取配置文件 BeanFactory
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
//获取实体类对象
IUserDao userDao = ac.getBean("userDao", UserDaoImpl.class);
userDao.saveUser();
userDao.delUser();
bean的实例化
1.无参构造+setter方法
<?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="userDao" class="cn.yunhe.dao.impl.UserDaoImpl"></bean>
<!--
property:属性
name:对应bean中的属性名
ref:引用
通过无参构造器+setter方法进行值的注入
-->
<bean id="userService" class="cn.yunhe.service.impl.UserServiceImpl">
<property name="userDao" ref="userDao"></property>
</bean>
</beans>
IUserDao userDao;
public UserServiceImpl(){}
public void setUserDao(IUserDao userDao){
this.userDao = userDao;
}
2.有参构造
<!-- 有参构造进行值的注入
constructor-arg:构造器的参数值
-->
<bean id="userService2" class="cn.yunhe.service.impl.UserServiceImpl">
<constructor-arg name="userDao" ref="userDao"></constructor-arg>
</bean>
<!--
有参构造
constructor-arg:构造参数设置
name:对应构造器中的参数名
value:对应参数的值
index:对应构造器中参数的位置(下标)
type:指定参数的类型
-->
<bean id="user" class="cn.yunhe.beans.User">
<!-- <constructor-arg name="age" value="12"></constructor-arg>
<constructor-arg name="name" value="小张"></constructor-arg> -->
<constructor-arg index="0" value="13" ></constructor-arg>
<constructor-arg index="1" value="小代" ></constructor-arg>
</bean>
3.静态工厂
<!--
静态工厂
factory-method:要指定的静态方法
-->
<bean id="user2" class="cn.yunhe.factory.StaticFactory" factory-method="getUser"></bean>
public class StaticFactory {
public static User getUser(){
return new User(15,"哈哈");
}
}
4.实例化工厂
<!--
动态注入
-->
<bean id="dynamicFactory" class="cn.yunhe.factory.DynamicFactory"></bean>
<!-- factory-bean:指定通过哪个工厂进行对象的创建 -->
<bean id="user3" factory-bean="dynamicFactory" factory-method="getUser"></bean>
public class DynamicFactory {
public User getUser(){
return new User(16,"嘿嘿");
}
}