Spring
1.IOC容器
概述:控制反转
综上所述:控制反转就是把创建对象,和对象间的调用的过程交给Spring来管理,目的是为了降低类与类的耦合性。
底层原理:
- ? XML解析
- 工厂模式
- 反射
原理图解
几个重要概念
- IOC容器:IOC的实现,依赖于IOC容器,而IOC容器的本质就是对象工厂
- IOC容器的原理
? BeanFactory:是最底层的接口,它只是提供了最简单的容器功能:加载配置文件 和创建对象
? 当加载配置文件的对象,只有在使用时,对象才会创建
? 好处:节省内存
? 缺点:因为在服务器切换的时候去创建对象,会影响执行效率
? ApplicationContext:引用上下文,它时继承了BeanFactory,它是Spring最高级的一个容器接口,它是提供了更多有用的功能
? 当加载配置文件的时候,会同时创建被配置的对象
? 好处:效率高,将复杂的创建过程在服务器启动时完成
? 缺点:耗费资源
- ApplicationContext的两个实现类
? ClassPathXmlApplicationContext: 从项目中的resources中加载配置文件
? FileSystemXmlApplicationContest: 从文件系统读取配置文件(需要配置文件)
? AnnotationConfigApplicationContext:读取注解配置
2.IOC操作–Bean管理
概念:IOC操作-Bean管理是指两个操作:
1.Spring创建对象,
2.Spring注入属性
实现方式:
-
XML方式 -
注解方式 1.基于XML方式-创建对象 该方式于入门案例方式相同 bean 标签中的常用属性
? id:唯一表示,通过该属性可以找到对应的bean标签
? class : 类的全限定类名
? **注意事项:**创建对象时,默认执行无参构造方法来完成对象的创建(反射)
? DI:依赖注入,它时IOC的一个具体操作
? 分类:
? 1.使用set方法进行注入
? 2.使用构造器进行注入
? 属性注入:
? 通过
name:实体类属性名
? value:属性值
? 构造方法注入
? 构造方法注入通过
? p命名空间注入
xmlns:p="http://www.springframework.org/schema/p"
<bean id="book" class="com.xiyou.pojo.Book" p:name="javaj" p:author="lisi"/>
? 特殊符号注入
? 1.null
<property name="name">
<null></null>
</property>
? 2.使用转译字符
3.CDATA
<property name="author">
<value><![CDATA[<lisi>]]></value>
</property>
? 外部bean
? 1.新建Moule,在pom.xml中添加相关依赖
? 2.按照三层架构的
? 级联:
? 注意事项:
? 引用数据类型
? 1.创建实体类:城市类 省类
? 2.配置实体类
2.3Bean的作用域
概述:在Spring中设置创建Bean实例是单例还是多例子。默认情况下,Bean实例是单例的。
注意: Singleton 和 prototype 的区别
- singleton : 在加载配置时,对象便会自动创建,并且只创建一个对象。
- prototype:在加载配置文件时,并不创建对象,在调用getBean方法时,才会创建对象,并且每次调用都会创建。
2.4Bean的生命周期
概述: 一个对象从创建到销毁的过程
过程:
- 通过构造器创建Bean的实例
- 为Bean的属性设置值或引用其他的Bean(调用set方法)
- 执行后置处理
- 调用Bean的初始化方法
- 执行后置处理
- Bean的对象获取
- 容器关闭,调用Bean的销毁方法
演示:
public class User {
private String name;
public User(){
System.out.println("第一步,通过构造器创建对象");
}
public void init(){
System.out.println("第三步,调用初始化方法");
}
public void destroy(){
System.out.println("第五步,调用销毁方法");
}
public void setName(String name) {
System.out.println("第二步,为Bean的属性设置值");
}
}
<?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="user" class="com.xiyou.pojo.User" init-method="init" destroy-method="destroy">
<property name="name" value="周杰伦"></property>
</bean>
<bean id="myBeanlst" class="com.xiyou.pojo.MyBeanLst">
</bean>
</beans>
public class UserTest {
@Test
public void test(){
ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
Object user = context.getBean("user", User.class);
System.out.println("第四步,获取对象");
((ClassPathXmlApplicationContext)context).close();
}
}
在Bean的生命周期中,如果配置了后置处理,生命周期会额外增加两步。
2.5XML方式-自动装配
**概述:**根据指定的装配规则(属性名、属性类型),Spring自定将匹配的属性进行注入
**实现:**借助 标签里的autowire属性来实现自动装配,该属性有两个值:
- byName根据属性名称注入
- byType根据属性类型注入
2.6引入外部配置文件
<context:property-placeholder location="jdbc.properties"/>
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${druid.driverClassName}"></property>
<property name="url" value="${druid.url}"></property>
<property name="username" value="${druid.username}"></property>
<property name="password" value="${druid.passward}"></property>
</bean>
2.7基于注解方式–创建对象
注解概述:注解是代码的特殊标记
格式: @注解名称(属性名=属性值,属性名2=属性值2,…)
**注解应用:**它可以简化XML的配置,注解可以用在类上,属性上,方法上。
Spring针对创建对象提供了四个注解
-
@Component:普通类使用 -
@Service:service层使用 -
@Controller: Web层使用 -
@Repository : Dao层使用 这四个注解功能是相同的,都可以用来创建Bean的实例
步骤:
- 新建Module添加依赖
- 创建UserDao 在改类上添加注解
- 在配置文件中开启扫描方式
- 测试
2.8基于注解方式—属性注入
常用注解:
- @AutoWierd:根据属性类型进行自动主动装载
- @Qualifier:根据属性名进行注入
- @Resource:根据类型注入,也可以根据名称注入
- @Value:基本数据类型的注入
演示: @AutoWired
3.JDBCTemplate
4.事务
4.1事务环境搭建
1.新建一个Module添加相关依赖
2.编写配置文件:
4.2事务操作
- 事务应该添加到三层架构中的service层
? 因为Service负责组装业务
2.在Spring中进行事务管理
3.声明式事务管理
4.在Spring中进行声明式事务管理,使用了AOP的原理
4.Spring针对不同的框架使用不同的API
|