Spring是一个开源框架。它是为了解决企业应用开发的复杂性而创建的。Spring的用途不仅限于服务器端的开发。
从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。
Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
1.Spring是轻量级的开源的JavaEE框架。
2.Spring两个核心部分:IOC和Aop
*1.IOC:控制反转,把创建对象的过程交给spring进行管理。
*2.Aop:面向切面编程,不修改源代码的情况下进行功能加强。
3.特点:
*1.方便解耦,简化开发。
*2.Aop编程支持。
*3.方便程序测试
*4.方便和其他框架整合。
*5.方便事务操作。
IOC底层原理,
IOC接口(BeanFactory),
IOC操作Bean管理(基于XML),
IOC操作Bean管理(基于注解)
*1.控制反转,把对象的创建和对象之间的调用过程,交给Spirng进行管理。
*2.使用IOC的目的是为了耦合度降低。
IOC过程:
*1 xml配置文件,配置创建的对象:
*2.有service类和dao类,创建工厂类:
代码如下(示例):
class UserFactory{
public static UserDao getDao(){
String classValue =class属性值; // 1.可以通过xml解析得到
Class clazz=Class.forName(classValue )//2.通过反射创建对象
return(UserDao)clazz.newInstance(); //3.创建对象
}
}
1.IOC思想基于IOC容器完成,IOC容器底层就是对象工厂。
2.Spring提供IOC容器实现两种方式(加载配置文件,获取配置文件的对象):
*1.BeanFactory:IOC容器基本实现方式,是Spring内部使用的接口。
*2.ApplicationContext:BeanFactory的子接口,提供更多更强大的功能,一般由开发人员使用。
1.什么是Bean管理:(Bean管理是指下边两个操作)
*1.Spring创建对象
*2.Spring注入属性
2.Bean管理操作有两种方式:
*1.基于xml方式创建对象:
*在spring配置文件中,使用bean标签,标签里面添加对应的属性,就可以实现对象创建。
*id属性:唯一标识
*class属性:类全路径名
*name属性:和id类似,可以使用特殊符号
创建对象时候,默认也是执行无参数构造方法完成对象创建。
*2.基于xml方式注入属性:
*DI:依赖注入,就是注入属性。
***第一种注入方式***:使用set方法进行注入。
(步骤1).创建类,定义属性和对应的set方法
public class User{
//创建属性
private String name;
private String bauthor;
//创建属性对应的set方法
public void setBname(String bname){
this.bname =bname;
}
(步骤2).在spring的配置文件中,配置对象创建,再配置属性注入
<!-- 配置us对象创建-->
<bean id="us" class="cn.hncj.services.User">
<property name="uname" value="李四"/>
</bean>
**第二种注入方式:** 有参构造注入。
public class User {
private int id;
private String uname;
public void setUname(String uname) {
this.uname = uname;
}
}
<!--3. 有参数构造注入属性-->
<bean id="student" class="cn.hncj.services.Student">
<constructor-arg name="sid" value="13143"></constructor-arg>
<constructor-arg name="sname" value="狗狗"></constructor-arg>
</bean>
*3.基于xml方式注入其他属性:
*1.字面量
(1)null值
(2)属性值包含特殊符号
>] ]>
三层架构体系:web层调用services层,services层调用dao层,services层调用dao层的步骤称为引入web
引入外部bean步骤:
*创建两个类sevice类和dao类
*在service层调用dao里面的方法
*在spring配置文件中进行配置
public interface TeacherDao {
public void update();
}
public class TeacherDaoImpl implements TeacherDao{
@Override
public void update() {
System.out.println("dao update....");
}
}
public class TeacherService {
//创建TeacherDao类型属性,生成set方法
private TeacherDao teacherDao;
public void setTeacherDao(TeacherDao teacherDao) {
this.teacherDao = teacherDao;
}
//传统方式1.创建TeacherDao的对象,接口等于new它的实现类的对象,这个过程称为多态。
//TeacherDao teacherDao = new TeacherDaoImpl();
//teacherDao.update();
public void add() {
System.out.println("service add....");
teacherDao.update();
}
}
<bean id="teacherService" class="cn.hncj.services.TeacherService">
<property name="teacherDao" ref="teacherDaoImpl">property>
bean>
<bean id="teacherDaoImpl" class="cn.hncj.dao.TeacherDaoImpl">bean>
(1).一对多关系:部门和员工
一个部门有多个员工,一个员工属于一个部门
(2).在实体类之间表示一对多关系:(如下代码)
public class Dept {
//部门类
private String dname;
public void setDname(String dname) {
this.dname = dname;
}
@Override
public String toString() {
return "Dept{" +
"dname='" + dname + '\'' +
'}';
}
}
public class Emp {
//员工类
private String ename;
private String gender;
//员工属于某一个部门,使用对象类型属性 表示
private Dept dept;
public void setDept(Dept dept) {
this.dept = dept;
}
public void setGender(String gender) {
this.gender = gender;
}
public void setEname(String ename) {
this.ename = ename;
}
public void add(){
System.out.println(ename+gender+dept);
}
}
(3.在spring配置文件中进行配置:
<bean id="emp" class="cn.hncj.bean.Emp">
<property name="ename" value="lucky">property>
<property name="gender" value="女">property>
<property name="dept">
<bean id="dept" class="cn.hncj.bean.Dept">
<property name="dname" value="安保部">property>
bean>
property>
bean>
public class Dept {
//部门类
private String dname;
public void setDname(String dname) {
this.dname = dname;
}
@Override
public String toString() {
return "Dept{" +
"dname='" + dname + '\'' +
'}';
}
}
public class Emp {
//员工类
private String ename;
private String gender;
//员工属于某一个部门,使用对象类型属性 表示
private Dept dept;
public void setDept(Dept dept) {
this.dept = dept;
}
public void setGender(String gender) {
this.gender = gender;
}
public void setEname(String ename) {
this.ename = ename;
}
public void add() {
System.out.println(ename + gender + dept);
}
}
<bean id="emp" class="cn.hncj.bean.Emp">
<property name="ename" value="lucky">property>
<property name="gender" value="女">property>
<property name="dept" ref="dept">property>
bean>
<bean id="dept" class="cn.hncj.bean.Dept">
<property name="dname" value="财务部">property>
bean>
public class Dept {
//部门类
private String dname;
public void setDname(String dname) {
this.dname = dname;
}
@Override
public String toString() {
return "Dept{" +
"dname='" + dname + '\'' +
'}';
}
}
public class Emp {
//员工类
private String ename;
private String gender;
//员工属于某一个部门,使用对象类型属性 表示
private Dept dept;
//生成dep的get方法
public Dept getDept() {
return dept;
}
public void setDept(Dept dept) {
this.dept = dept;
}
public void setGender(String gender) {
this.gender = gender;
}
public void setEname(String ename) {
this.ename = ename;
}
public void add() {
System.out.println(ename + gender + dept);
}
}
<bean id="emp" class="cn.hncj.bean.Emp">
<property name="ename" value="lucky">property>
<property name="gender" value="女">property>
<property name="dept" ref="dept">property>
<property name="dept.dname" value="技术部">property>
bean>
<bean id="dept" class="cn.hncj.bean.Dept">
<property name="dname" value="财务部">property>
bean>
*相比于第一种级联赋值,第二种级联赋值方法中的员工类需要创建dept对象的getter方法,否则取不到dept对象。
例如:以上就是今天要讲的内容,本文仅仅简单介绍了spring5概念和XML配置方式的使用,接下来的IOC管理XML方式学习内容请查看主页。