spring的简介
Spirng框架是一个轻量级的解决方案,可以一站式构建企业级项目的应用,它是为了解决企业级开发的复杂性而创建的,Spirng使用了基本的JavaBean来完成以前只能由EJB才能完成的事情,然而Spring的用法不仅限制于服务器端的开发,从简单的,可测试性的和藕合度的角度来讲,任何应用都可以从spring中收益,Spring是一个轻量级的控制反转(Ioc)和面向切面的容器框架
spring的优势
1.降低了三层架构中之间的额耦合度
2.支持Aop,通过Aop思想可以完成声明式事务的处理,日志管理以及权限拦截等
3.可以和多种框架集合在一起
4.支持Juint测试
spring的入门程序的编写
1.导入相关的依赖(maven工程不叫jar包)
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.ujiuye</groupId>
<artifactId>ssm_day05_springbean</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<dependencies>
<!--添加spring的依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
</dependencies>
</project>
2.编写主配置文件,主要是对象的生成等具体内容实现,主要是将创建对象的方式改成由Spring容器来帮我们做,我们只需要调用即可
<?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">
<!--把对象的创建交给spring来管理-->
<!--spring的对bean的管理细节
1.创建bean对象的3种方式
2.bean对象的作用范围
3.bean对象的生命周期
-->
<!--创建bean的三种方式-->
<!--
第一种方式:使用默认的构造方法来创建
采用spring的配置文件中使用bean标签,配以id和class属性以后,且没有其他属性和标签的时候
采用的就是这种默认的构造函数来创建bean对象,如果类中没有默认的构造方法,则无法创建
<bean id="accountService" class="cn.ujiuye.service.impl.AccountServiceImpl"></bean>
-->
<!--第二种方法:使用普通的工厂中的方法创建对象(使用某个类的中方法来创建工厂,并存入到spring容器中)
先实例化工厂类,然后再调用其相关的方法
<bean id="instanceFactory" class="cn.ujiuye.factory.InstanceFactory"></bean>
<bean id="accountService" factory-bean="instanceFactory" factory-method="getAccountService"></bean>
-->
<!--第三种方式:使用工厂中的静态方法创建对象,(使用某个类的静态方法调用方法,刚创建的时候不会创建对象,是通过掉用方法的返回值,并存入到spring容器中)
<bean id="accountService" class="cn.ujiuye.factory.StaticFactory" factory-method="getAccountService"></bean>
-->
<!--bean的作用范围
bean的lazy-init=“true" 指的是延迟节点的实例化,在使用的时候再实例化
bean标签的scope属性
作用:指定bean的作用的范围
singleTon:单例的(默认的)
prototype 多例的
request 作用于web应用的请求范围
session 作用于web应用的会话技术
global-session 作用于集群环境的会话范围,当不死集群环境的时候,它既是session
<bean id="accountService" class="cn.ujiuye.service.impl.AccountServiceImpl" scope="prototype"></bean>
-->
<!--bean对象的生命周期
单例模式:
出生:容器创建时对象出生 init-method="init"
活着:容器还在,对象一直活着
死亡:容器消亡,对象消亡 destroy-method="destory" 常把数据源关闭的方法配置到数据源销毁的方法里面
总结:单例模式的生命周期和容器相同
多例模式:
出生:当我们使用对象的时,spring框架为我们创建
活着:只要对象一直使用就一直在活着
死亡:当对象长时间不用的时候,由java的垃圾回收装置回收
-->
<bean id="accountService" class="cn.ujiuye.service.impl.AccountServiceImpl"
scope="singleton" init-method="init" destroy-method="destory"></bean>
</beans>
3.接口的创建,一般我们做业务都是调用我们写的各种接口
package cn.ujiuye.service;
/**
* @author liugang
* @date 2019/10/4
* 账户的业务层接口
*/
public interface IAccountService {
/**
* 模拟保存账号
*/
void saveAccount();
}
4.接口的实现类,实现接口对接口对象的实现等特点,方法在这里面实现,完成其相关的业务逻辑的编写
package cn.ujiuye.service.impl;
import cn.ujiuye.service.IAccountService;
/**
* @author liugang
* @date 2019/10/4
* 账号的业务层实现类
*/
public class AccountServiceImpl implements IAccountService {
public AccountServiceImpl(){
System.out.println("对象创建了");
}
public void saveAccount() {
System.out.println("service中的saveAccount的方法执行了");
}
/**
* 初始化方法
*/
public void init() {
System.out.println("对象初始化了");
}
/**
* 销毁方法
*/
public void destory() {
System.out.println("对象销毁了");
}
}
5.编写测试类,实现对数相关的方法的实现
package cn.ujiuye.ui;
import cn.ujiuye.service.IAccountService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* @author liugang
* @date 2019/10/4
* 模拟了一个表现层,用于调用业务逻辑层
*/
public class Client {
public static void main(String[] args) {
//1.获取核心容器对象 *****Bean对象在解析的时候就完成了实例化,一个节点一个节点的解析
//ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
//2.根据id获取Bean对象
IAccountService as = (IAccountService) ac.getBean("accountService");
as.saveAccount();
ac.close();
}
}