您的位置:首页 > 编程语言 > Java开发

Spring知识点总结(未写完)

2017-12-20 17:31 441 查看
参考慕课网课程:Spring入门篇

spring介绍

IOC控制反转
1Bean容器初始化

2Spring注入
设值注入

构造注入

Bean
1Bean的配置项

2Bean的作用域Scope

3Bean的生命周期
初始化回调

销毁回调

配置全局默认初始化销毁方法

4Spring Bean装配之Aware接口

5Bean的自动装配Autowiring
byname要在引用的bean中有set方法和属性

byType与bean的id无直接的关系甚至可以删掉id

constructor构造方法

6Resource
Resources

ResourceLoader对Resource进行加载的类所有appliction context实现了该接口



Bean管理的注解实现
1Bean的定义及作用域
元注解注解的注解

类的自动检测bean的注册

contextannotation-config contextcomponent-scan

使用过滤器进行自定义扫描

定义bean

作用域

代理方式

2Autowired
成员变量构造器setter方法三者选其一 构造注入 set注入

可以listmap

QualifierResource

3基于Java的容器注解-
Bean

ImportResource Value

Bean Scope

4基于泛型的自动装配

5

1..spring介绍

框架

通过配置方式来创建对象,管理对象之间依赖关系

spring的web层框架Spring MVC

控制反转IOC、面向切面AOP

把所有由它管理的对象叫做bean



2..IOC:控制反转

Java8中,接口可以拥有方法体

DI:依赖注入是IOC一种实现方式。

IOC容器中,将所有对象称为Bean, 配置元数据

Spring对于Bean两种方式: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"> 
<bean id="oneInte" class="com.imooc.ioc.interfaces.OneInterfaceImpl">
</bean>

</beans>


(1)Bean容器初始化:

两个包:

org.springframework.beans

org.springframework.context

BeanFactory提供配置结构和基本功能,加载并初始化Bean

ApplicationContext保存了Bean对象(ClassPathXmlApplicationContext)

初始化ApplicationContext方式:

本地文件,classpath(相对路径:相对于工程的路径),web应用中依赖servlet或Listener



(2)Spring注入:

Spring注入:在启动Spring容器加载bean配置时,完成对变量的赋值行为(即:创建bean的过程中,完成对变量的赋值行为)

注入方式:设值注入、构造注入

设值注入

xml里:property name=”injectionDAO”…:name为类中名称,不为类型 。即:private InjectionDAO injectionDAO。

需要set方法



构造注入

需要含那个参数的构造方法



3..Bean:

(1)Bean的配置项:

Id

Class:要实例化的类

Scope

Constructor arguments

Properties:属性

Autowiring mode:自动装配模式

lazy-initialization mode:懒加载模式

Initialization/destruction method:初始化、销毁方法

(2)Bean的作用域Scope:

scope=”singleton”…

singleton(默认),prototype,request,session,global session



(bean容器:context)

(3)Bean的生命周期:

定义,初始化,使用,销毁

初始化回调:

①实现org.springframework.beans.factory.InitializingBean接口,覆盖afterPropertiesSet方法。

②配置init-method

销毁回调:

①实现org.springframework.beans.factory.DisposableBean接口,覆盖destroy方法

②配置destroy-method

①例:

<bean id="beanLifeCycle" class="com.imooc.lifestyle.BeanLifeCycle" ></bean>

public class BeanLifeCycle implements InitializingBean,DisposableBean{
@Override
public void destroy() throws Exception {
System.out.println("bean destroy");
}
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("bean afterPropertiesSet");
}
}


②例:

<bean id="beanLifeCycle" class="com.imooc.lifestyle.BeanLifeCycle" init-method="start" destroy-method="stop"></bean>

package com.imooc.lifestyle;
public class BeanLifeCycle {
public void start() {
System.out.println("bean start");
}
public void stop() {
System.out.println("bean stop");
}
}


配置全局默认初始化、销毁方法:

(③)

<?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" default-init-method="defaultInit" default-destroy-method="defaultDestroy">

<bean id="beanLifeCycle" class="com.imooc.lifestyle.BeanLifeCycle" ></bean>

</beans>


public class BeanLifeCycle{
public void defaultInit() {
System.out.println("bean defaultInit");
}
public void defaultDestroy() {
System.out.println("bean defaultDestroy");
}
}


三个方法同时使用时,默认的初始化不生效,实现接口的方法先于bean里面init-method和destroy-method方法执行(这两个都执行)

默认的全局初始化和销毁方法(③)可以有可以没有,其他两个没有时,它即使没有,系统也不会报错。

(4)Spring Bean装配之Aware接口:

以Aware结尾的接口,得到相应资源。

ApplicationContextAware,BeanNameAware……

可以借此方法得到相应ApplicationContext:

//与bean.xml文件中的bean一样

public class MoocApplicationContext implements ApplicationContextAware{
private ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext=applicationContext;
System.out.println("sdsd:"+applicationContext.getBean("moocApplicationContext").hashCode());
}
}


public class MoocBeanName implements BeanNameAware{
@Override
public void setBeanName(String name) {
System.out.println("fsdfs:"+name);//xml文件中bean的id
}
}


例子:

public class MoocApplicationContext implements ApplicationContextAware,BeanNameAware{
//private ApplicationContext applicationContext;
private String beanName;
@Override
public void setBeanName(String name) {
this.beanName=name;
System.out.println("beanName:"+name);
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
//this.applicationContext=applicationContext;
System.out.println("MoocApplicationContext:"+applicationContext.getBean(this.beanName));
}
}


(5)Bean的自动装配(Autowiring):

No(默认),byname,byType,Constructor

byname:在同一个IOC容器中,id必须为唯一的,不能重复



byname:要在引用的bean中有set方法和属性

例:

public class AutoWiringService {
private AutoWiringDAO autoWiringDAO;
public void setAutoWiringDAO(AutoWiringDAO autoWiringDAO) {
this.autoWiringDAO = autoWiringDAO;
}
public void say(String word) {
this.autoWiringDAO.say(word);
}
}


<?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" default-autowire="byName">
<!--  -->

<!--    不用写:<property name="autoWiringDAO" ref="autoWiringDAO"></property>  -->
<bean id="autoWiringService" class="com.imooc.autowiring.AutoWiringService">
</bean>

<bean id="autoWiringDAO" class="com.imooc.autowiring.AutoWiringDAO">
</bean>

</beans>


byType:与bean的id无直接的关系,甚至可以删掉id

将上面byname代码xml中一行改为:default-autowire=”byType”

例:

public class AutoWiringService {
private AutoWiringDAO autoWiringDAO;
public void setAutoWiringDAO(AutoWiringDAO autoWiringDAO) {
this.autoWiringDAO = autoWiringDAO;
}
public void say(String word) {
this.autoWiringDAO.say(word);
}
}


<?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" default-autowire="byType">

<bean id="autoWiringService" class="com.imooc.autowiring.AutoWiringService">
</bean>

<bean  class="com.imooc.autowiring.AutoWiringDAO"><!-- 无id -->
</bean>

</beans>


constructor:构造方法

因为是找构造器参数类型,与id无直接关系,可以删掉id

default-autowire=”constructor”

例:

package com.imooc.autowiring;

public class AutoWiringService {
private AutoWiringD
edb8
AO autoWiringDAO;

public AutoWiringService(AutoWiringDAO autoWiringDAO) {
System.out.println("AutoWiringService");
this.autoWiringDAO=autoWiringDAO;
}
public void setAutoWiringDAO(AutoWiringDAO autoWiringDAO) {
this.autoWiringDAO = autoWiringDAO;
}
public void say(String word) {
this.autoWiringDAO.say(word);
}
}


<?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" default-autowire="constructor">

<bean id="autoWiringService" class="com.imooc.autowiring.AutoWiringService">
</bean>

<bean  class="com.imooc.autowiring.AutoWiringDAO"><!-- 可无id -->
</bean>

</beans>


(6)Resource:

Resources:

针对资源文件的统一接口



ResourceLoader:对Resource进行加载的类,所有appliction context实现了该接口

通过前面Awvare接口找applictioncontext



ResourceLoader参数:



例:

config.txt

public class MoocResource implements ApplicationContextAware{
private ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext=applicationContext;
}
public void resource() throws IOException {
//Resource resource=applicationContext.getResource("classpath:config.txt");
//直接classpath:config.txt,因为config.txt所在路径被配置到了工程的classpath中
//(Java Build Path->Resource目录中)

//Resource resource=applicationContext.getResource("file:E:\\Eclipse and Eclipse EE\\workplace for EE\\LearnSpring\\src\\config.txt");

//Resource resource=applicationContext.getResource("url:http://……");

Resource resource=applicationContext.getResource("config.txt");
//依赖于applicationContext,applicationContext为根据xml classpath创建出来的

System.out.println(resource.getFilename());
System.out.println(resource.contentLength());
}
}


4..Bean管理的注解实现:

(1)Bean的定义及作用域:

@Component通用注解,可用于任何bean

@Repository,@Service,@Controller基于@Component,类似于子注解



元注解:注解的注解



类的自动检测,bean的注册





context:annotation-config context:component-scan

在xml配置文件中配置:

context:annotation-config只查找在同一个applicationContext中的bean注解

使用过滤器进行自定义扫描





定义bean:



作用域



代理方式:

scoped-proxy 默认为no



(2)@Autowired:

成员变量,构造器,setter方法**:三者选其一 构造注入 set注入

@Autowired(required=false):

默认情况下,@Autowired 注释意味着依赖是必须的,它类似于 @Required 注释,然而,你可以使用 @Autowired 的 (required=false) 选项关闭默认行为。

可以list,map**:





@order注解对List有效而对Map无效



//@Order(value=1)
@Order(2)
@Component
public class BeanImplOne implements BeanInterface {
}


@Qualifier,@Resource

缩小范围,指定到具体的bean

@Qualifier("beanImplTwo")
private BeanInterface beanInterface;
//beanImplOne,beanImplTwo都实现了beanInterface接口




Resource 通过名字注解注入







(3)基于Java的容器注解—-:

@Bean

图上两种方式等效



//@Configuration



@Configuration
public class StoreConfig {
//  @Bean //name默认为方法名称
@Bean(name="stringstore",initMethod="init",destroyMethod="destroy")//应该在StringStore类里面
public Store StringStore() {
return new StringStore();
}
}


@ImportResource @Value





StoreConfig配置:

@Configuration
@ImportResource("classpath:config.xml")
public class StoreConfig {

@Value("${url}")
private String url;
@Value("${jdbc.userName}")
private String userName;
@Value("${password}")
private String password;

@Bean
public MyDriverManager myDriverManager() {
return new MyDriverManager(url,userName,password);
}

//  @Bean //name默认为方法名称
@Bean(name="stringstore",initMethod="init",destroyMethod="destroy")//应该在StringStore类里面
public Store StringStore() {
return new StringStore();
}
}


config.xml加载config.properties文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> 
<context:property-placeholder location="classpath:/config.properties"/>

</beans>


config.properties:

#Created by JInto - www.guh-software.de
#Sun Aug 10 16:25:57 CST 2014
jdbc.userName=root
password=root
url=127.0.0.1


@Bean @Scope



(4)基于泛型的自动装配:

(5)

5..

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring