Spring框架概述以及重要知识点解析
一、spring框架概述
spring解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson创建。简单来说,Spring是一个分层的JavaSE/EE full-stack(一站式) 轻量级开源框架。
二、spring框架的优点
1、方便解耦,简化开发;2、支持面向切面编程(AOP);
3、支持声明式事务的处理,只需要通过配置对事务进行管理无需手动;4、方便程度测试。spring对Junit支持,可以通过注解测试spring程序;5、方便集成优秀框架;6、降低API的使用难度;
三、spring核心技术
(一)什么是IOC
IOC:控制反转,将对象创建的权利反转给spring的框架,是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。
1、IOC程序入门
第一步:创建maven仓库java工程
第二步:引入坐标①spring-context②commons-logging③log4j④junit
第三步:导入log4j文件
第四步:使用接口方式,创建业务层和持久层
第五步:并在测试类中调用(使用创建对象的方式)
接下来使用新方式IOC:
1.1首先创建applicatinContext.xml
<?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">
<!--IOC管理bean-->
<bean id="userService" class="demo.serviceImpl" />
</beans>
1.2编写测试类
步骤:①创建spring工厂;②从容器中获取;③调用方法
@Test
public void run(){
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
Service service = (Service) ac.getBean("userService");
service.save();
2、IOC技术总结
ApplicationContext接口,工厂的接口,使用该接口可以获取到具体的Bean对象。该接口下有两个具体的实现类。
ClassPathXmlApplicationContext(加载类路径下的spring配置文件)
FileSystemXmlAppLicationContext(加载本地磁盘下的spring配置文件)
3、Spring框架的Bean管理的配置文件方式
id属性,Bean起个名字,在约束中采用ID的约束,唯一,取值要求:必须以字母开始,可以使用字母、数字、连字符、下划线、句话、冒号 id:不能出现特殊字符。
class属性,Bean对象的全路径。
scope属性,scope属性代表Bean的作用范围。
singleton单例(默认值),最常用的方式。
prototype多例
request应用在Web项目中,每次HTTP请求都会创建一个新的Bean
session应用在Web项目中,同一个HTTP Session 共享一个Bean
Bean对象的创建和销毁的两个属性配置
说明:Spring初始化bean或销毁bean时,有时需要作一些处理工作,因此spring可以在创建和拆卸bean的时候调用bean的两个生命周期方法
init-method,当bean被载入到容器的时候调用init-method属性指定的方法
destroy-method,当bean从容器中删除的时候调用destroy-method属性指定的方法
4、实例化Bean对象的三种方式
默认是无参数的构造方法(默认方式,基本上使用)
<bean id="userService" class="demo.serviceImpl" />
静态工厂实例化方式
实例工厂实例化方式
(二)什么是DI依赖注入
DI:依赖注入,在Spring框架负责创建Bean对象时,动态的将依赖对象注入到Bean组件中
1、属性的set方法注入值
编写属性,提供该属性对应的set方法,编写配置文件完成属性值的注入
// 编写成员属性,一定需要提供该属性的set方法
private OrderDao orderDao;
// 一定需要提供该属性的set方法,IOC容器底层就通过属性的set方法方式注入值
public void setOrderDao(OrderDao orderDao) {
this.orderDao = orderDao;
}
// 消息
private String msg;
// 年龄
private int age;
public void setMsg(String msg) {
this.msg = msg;
}
public void setAge(int age) {
this.age = age;
}
配置文件中
<bean id="os" class="cn.tx.service.OrderServiceImpl">
<property name="orderDao" ref="od" />
<property name="msg" value="你好" />
<property name="age" value="30" />
</bean>
2、属性构造方法注入值
对于类成员变量,构造函数注入。
public class Car {
// 名称
private String cname;
// 金额
private Double money;
public Car(String cname, Double money) {
this.cname = cname;
this.money = money;
}
@Override
public String toString() {
return "Car{" +
"cname='" + cname + '\'' +
", money=" + money +
'}';
}}
配置文件
<bean id="car" class="cn.tx.demo2.Car">
<constructor-arg name="cname" value="大奔" />
<constructor-arg name="money" value="400000" />
</bean>
3、数组,集合(list,set,map)Properties等的注入
// 数组
private String [] strs;
public void setStrs(String[] strs) {
this.strs = strs;
}
private List<String> list;
public void setList(List<String> list) {
this.list = list;
}
private Map<String,String> map;
public void setMap(Map<String, String> map) {
this.map = map;
}
private Properties properties;
public void setProperties(Properties properties) {
this.properties = properties;
}
配置文件
<!--给集合属性注入值-->
<bean id="collectionBean" class="cn.tx.demo3.CollectionBean">
<property name="strs">
<array>
<value>美美</value>
<value>小凤</value>
</array>
</property>
<property name="list">
<list>
<value>亮亮</value>
<value>建云</value>
</list>
</property>
<property name="map">
<map>
<entry key="aaa" value="聪聪"/>
<entry key="bbb" value="淞铭"/>
</map>
</property>
<property name="properties">
<props>
<prop key="username">root</prop>
<prop key="password">123456</prop>
</props>
</property>
</bean>
4、多配置文件的加载方式
在src的目录下又多创建了一个配置文件,现在是两个核心的配置文件,那么加载这两个配置文件的方式有两种!
①<import resource="applicationContext2.xml"/>
②工厂创建的时候直接加载多个配置文件
本文地址:https://blog.csdn.net/javaScript1997/article/details/107989954
下一篇: 快速排序算法,二分思想