1. Spring是什么
Spring简述二
Spring简述三——Spring和JDBCTemplate的整合&& Spring和Mybatis的整合使用
Spring:轻量级开源框架
核心:
IOC(inverse of Control):控制反转
DI:依赖注入AOP(面向切面):给类添加功能而不修改源代码Spring对JavaEE提供了不同层的解决方案
展示层:servlet、SpringMVC
业务层:Spring IOC
数据层:JDBCTemplate、Mybatis
2. IOC
控制反转将对象的管理(创建,维护,销毁)交给Spring容器,使用方在使用对象时在Spring容器中直接获取对象(将对象的使用权交给使用方),使用方不用关注对象的创建过程。
IOC原理:
1、首先配置XML配置文件,将类配置在配置文件中
2、使用dom4j来解析XML配置文件
3、利用工厂方法来创建对象——通过反射技术创建对象
class.forname("com.tulun.bean.student");
class User{
public void say(){
//业务逻辑
}
}
//配置文件中
<bean id="user" class="com.bean.User">
class Facyory{
public static User getBnean(String name){
//读取配置文件;
通过dom4j解析xml文件
//获取name值对应的类路径
Class class="name"->"com.bean.User"
//通过反射创建对象
User user=clss.newInstance;
return user;
}
}class Test{public void add(){User user=Facyory.getBean("user")user.talk;
}
}
IOC的实现:
基于配置bean的实例化:
1、无参构造函数实例化(如果此时给一个有参,会覆盖默认的无参,会报错)在使用无参构造时,要保持类中有无参构造函数,或使用默认的无参构造函数(隐形),即类中不能显性的使用有参
2、静态工厂方法实例化
public class StaticFactory {
public static Student getBean() {
return new Student();
}
}
class属性:静态工厂类的全路径名 factory-method属性:方法名,静态工厂里获取student对象提供的方法
<bean id="student1" class="comfactory7.StaticFactory" factory-method="getBean"/>
3、普通工厂方法实例化
public class CommonFactory {
public Student getStudent() {
return new Student();
}
}
<bean id="comfactory" class="com.factory7.CommonFactory"/>
<bean id="student2" factory-bean="comfactory" factory-method="getStudent"/>
基于注解bean的实例化使用步骤:
1、开启注解扫描
<context:component-scan base-package=“com.bean7”/>
2、添加注解@Component:添加在类上,表示将此类交给Spring
@Component(value = "student")
public class Student {
private List<Integer> list;
public void setList(List <Integer> list) {
this.list = list;
}
}
基于@Component注解衍生出三个注解:
@Controller 展示层
@Service 业务层
@Repository 持久层
ps.以上注解的作用一样,放什么层只是习惯
DI依赖注入(向对象赋值):
1、有参构造:
public class Student {
private String name;
//有参构造函数
public Student(String name) {
this.name = name;
}
}
<!--依赖注入方式1:有参构造-->
<bean id="student3" class="com.bean7.Student" >
<!-- 通过构造函数注入name属性 constructor-arg标签:通过构造注入属性 name属性:类中的属性名 value属性:指定该属性的值 -->
<constructor-arg name="name" value="zhansan">
</constructor-arg></bean>
<constructor-arg>name=" " value=" "</constructor-arg>
2、set方法:
public class Student {
private String name;
public void setName(String name) {
this.name = name;
}
}
<!--依赖注入方式2:set方法-->
<bean id="student4" class="com.tulun.bean7.Student">
<!--通过set方法注入name属性-->
<property name="name" value="李四"/>
</bean>
<property>name=" " value=" "</property>
注:如果value处要填充的是一个引用类型的对象而不是String(value里只能填String类型),就要把vlue关键字改成ref ref——引用类型;
list——list集合;
array——数组;
map——map集合(map里有<entry>标签);