栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring框架

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring框架

1.Spring简介 Spring优点

1.非侵入式

2.容器

在应用加载时,创建一个 Map,用于存放三层对象。 我们把这个 map 称之为容器。

3.Ioc:控制反转

即将对象创建的权利交给了框架,包括依赖注入和依赖查找

原来: 我们在获取对象时,都是采用 new 的方式。是主动的。

现在: 我们获取对象时,同时跟工厂要,有工厂为我们查找或者创建对象。是被动的。

作用:削减计算机程序的耦合(解除我们代码中的依赖关系)

4.依赖注入

5.AOP:面向方面的编程

面向方面编程,将日志、安全、事务管理等理解成一共方面,以前这些服务通常是直接写在业务逻辑中,这两个缺点:1,业务逻辑不干净 2,这些服务被很多业务逻辑反复使用,不能复用。AOP解决了这些,将这些服务剥离了出来。

Spring体系结构

2.Spring Bean的装配模式 2.1 Spring IOC容器

Spring IOC容器的设计主要基于BeanFactory和ApplicationContext这两个接口

BeanFactory是底层接口,ApplicationContext是其子接口,提供更好的功能

2.1.1ApplicationContext的常用实现类

ClassPathXmlApplicationContext

从类路径classPath中寻找指定的XML配置文件,找到并装载ApplicationContext的实例化工作

ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");

FileSystemXmlApplicationContext

采用绝对路径的方式不推荐使用

AnnotationConfigApplicationContext

当我们使用注解配置容器对象时,需要使用此类来创建 spring 容器。它用来读取注解。

2.1.2 ApplicationContext容器由Web服务器实例化

这些放在web.xml文件中

基于ContextLoaderListener实现

指定Spring配置文件的位置

    contextConfigLocation
    classpath:applicationContext.xml

指定以ContextLoaderListener方式启动Spring容器

   
       org.springframework.web.context.ContextLoaderListener
   

基于ContextLoaderServlet实现

指定Spring配置文件的位置

    contextConfigLocation
    classpath:applicationContext.xml

指定以ContextLoaderListener方式启动Spring容器

    context
   
       org.springframework.web.context.ContextLoaderListener
   
    1

在Spring、Mybatis和SpringMVC的整合开发时,常用这种方式。

2.2 Bean的配置 2.2.1Bean标签简介
作用:
	用于配置对象让 spring 来创建的。
	默认情况下它调用的是类中的无参构造函数。如果没有无参构造函数则不能创建成功。
属性:
	id:给对象在容器中提供一个唯一标识。用于获取对象。
	class:指定类的全限定类名。用于反射创建对象。默认情况下调用无参构造函数。
	scope:指定对象的作用范围。
		* singleton :默认值,单例的.
		* prototype :多例的.
		* request :WEB 项目中,Spring 创建一个 Bean 的对象,将对象存入到 request 域中.
		* session :WEB 项目中,Spring 创建一个 Bean 的对象,将对象存入到 session 域中.
		* global session :WEB 项目中,应用在 Portlet 环境.如果没有 Portlet 环境那么
			globalSession 相当于 session.
	init-method:指定类中的初始化方法名称。
	destroy-method:指定类中销毁方法名称。

2.2.2 Bean的作用范围与生命周期
单例对象:scope="singleton"
	一个应用只有一个对象的实例。它的作用范围就是整个引用。
	生命周期:
		对象出生:当应用加载,创建容器时,对象就被创建了。
		对象活着:只要容器在,对象一直活着。
	对象死亡:当应用卸载,销毁容器时,对象就被销毁了。
多例对象:scope="prototype"
	每次访问对象时,都会重新创建对象实例。
	生命周期:
		对象出生:当使用对象时,创建新的对象实例。
		对象活着:只要对象在使用中,就一直活着。
		对象死亡:当对象长时间不用时,被 java 的垃圾回收器回收了。
2.2.3 Bean实例化的三种方式

使用无参构造函数


spring 管理静态工厂-使用静态工厂的方法创建对象

public class StaticFactory {
public static IAccountService createAccountService(){
return new AccountServiceImpl();
}
}

 

spring 管理实例工厂-使用实例工厂的方法创建对象

第三种方式:spring 管理实例工厂-使用实例工厂的方法创建对象

public class InstanceFactory {
public IAccountService createAccountService(){
return new AccountServiceImpl();
}
}



3.Spring 依赖注入

依赖注入:Dependency Injection。它是 spring 框架核心 ioc 的具体实现。 我们的程序在编写时,通过控制反转,把对象的创建交给了 spring,但是代码中不可能出现没有依赖的情况。 ioc 解耦只是降低他们的依赖关系,但不会消除。例如:我们的业务层仍会调用持久层的方法。 那这种业务层和持久层的依赖关系,在使用 spring 之后,就让 spring 来维护了。 简单的说,就是坐等框架把持久层对象传入业务层,而不用我们自己去获取。

3.1构造函数注入

java代码部分

public class AccountServiceImpl implements IAccountService {
	private String name;
	private Integer age;
	private Date birthday;
	public AccountServiceImpl(String name, Integer age, Date birthday) {
		this.name = name;
		this.age = age;
		this.birthday = birthday;
	}
	@Override
	public void saveAccount() {
		System.out.println(name+","+age+","+birthday);
	}
}

xml部分


	
	
	


3.2 Set方法注入

java代码部分

public class AccountServiceImpl implements IAccountService {
	private String name;
	private Integer age;
	private Date birthday;
	public void setName(String name) {
		this.name = name;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	@Override
	public void saveAccount() {
		System.out.println(name+","+age+","+birthday);
	}
}

xml配置


	
	
	


3.3对集合属性的注入

java代码部分

public class AccountServiceImpl implements IAccountService {
	private String[] myStrs;
	private List myList;
	private Set mySet;
	private Map myMap;
	private Properties myProps;
	public void setMyStrs(String[] myStrs) {
		this.myStrs = myStrs;
	}
	public void setMyList(List myList) {
		this.myList = myList;
	}
	public void setMySet(Set mySet) {
		this.mySet = mySet;
	}
	public void setMyMap(Map myMap) {
		this.myMap = myMap;
	}
	public void setMyProps(Properties myProps) {
		this.myProps = myProps;
	}
	@Override
	public void saveAccount() {
		System.out.println(Arrays.toString(myStrs));
		System.out.println(myList);
		System.out.println(mySet);
		System.out.println(myMap);
		System.out.println(myProps);
	}
}

xml配置






	AAA
	BBB
	CCC




  
	AAA
	BBB
	CCC
  



 
	AAA
	BBB
	CCC
 



 
	aaa
	bbb
 



 
	
	
		bbb
	
 


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/591104.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号