spring框架常用知识

1.spring简介

spring:开发框架
作用:简化企业应用开发,降低可侵入性

spring提供的IOC和AOP功能,可以将组件的耦合度降至最低,几解耦,便于系统的维护和升级

spring的本质是管理应用中的对象,即创建和维护对象之间的关系,也可以与第三方整合应用。

2.spring容器
在spring中,任何的java类和javaBean都被当成bean处理,这些Bean通过容器管理和使用

spring容器有BeanFactory和ApplicationContext两种类型

spring容器的实例化 ApplicationContext继承BeanFaction接口,拥有更多的企业级方法

加载工程classpath下的配置文件实例化
ApplicationContext ac=new ClassPathXmlApplicationContext(“配置文件路径”);

spring容器的使用
1.在容器配置文件 spring.xml中添加Bean定义(属性)

2.创建容器对象后,调用getBean方法获取实例
getBean(“标识符”)

3.Bean的作用域
spring容器在实例化Bean时,可以创建以下作用域的Bean对象

singleton:在spring容器中一个Bean定义对应一个实例对象,(默认项)

protorype:一个Bean定义对应多个实例对象
request:在一次Http请求中,一个Bean定义对应一个实例对象
session:再一次Http session中,一个Bean定义对应一个实例对象

Bean的作用域可以通过定义的scope属性指定

4.Bean的生命周期

指定初始化回调方法
<bean init-method=""/>

指定销毁的回调方法,仅适用于singleton模式的Bean
<bean destroy-method=""/>

在标签中的default-init-method属性,可以为容器中指定初始化回调方法,也可以通过default-dastory-method属性为容器中的bean指定销毁
回调方法

5.bean的延迟实例化
默认行为是在容器实例化的同时将单例,模式的bean提前实例化

延迟实例化操作:在声明时,指定其属性lazy-init为true,一个延迟实例化的bean将在第一次被用到时,实例化

注意:仅适用于单例模式

1.基于注解的组件扫描
组件扫描:
指定一个包路径,spring会自动扫描此包,及其子包中所有的组件类,当发现组件类定义前有特定的注解标记时,就将此组件纳入到spring容器中管理,
等价于原有的xml配置中的定义

组件扫描可以替大量xml配置的定义的scope属性指定

指定扫描类路径,使用组件扫描,需要在xml配置文件中指定扫描父集package路径

<context:component-scan base-package="com.xms"/>.

容器会自动扫描指定包下的组件类,如果此组件类定义前有特定的注解 标记,则将会此组件类实例化为bena对象

自动扫描的注解标记

@Component 通用注解
@Repository 持久层组件注解
@Service 业务层组件注解
@Controller 控制层组件注解

自动扫描组件的命名:
当一个组件在扫描过程中被检测到时,会生成一个默认的Id值,默认id值为小写开头的类名,也可以在注解标记中自定义id.

指定组件的作用域
通常受spring容器管理的组件,默认作用域是“singleton”,如果需要其他的作用域可以使用@scope注解,只要在注解中提供作用域的名称即可.

指定销毁和初始化的回调方法
@PreDestory 销毁回调方法
@PostConstruct 初始化回调方法

2.spring IOC


ioc全称 Inversion of Control 被翻译成控制反转
ioc是指程序中对象的获取方式发生反转,由最初的new方式创建,转变为由第三方框架创建,注入(DI),
他降低对象之间的耦合度

spring容器采用di方式实现ioc控制,ioc是spring框架的基础和核心

DI全称是 Dependency Injection,被翻译成依赖注入Di的基本原理是将一起工作具有关系的对象,通过方法参数传入,建立关系,因此容器的工作就是创建
Bean’对象时注入依赖关系

IOC是一种思想,而di是实现ioc的主要技术途径.

	DI注入方式:
		1.Setter注入
			public class B(){
			
			}
		
			public class A(){
				private B b;
				
				public void setB(B b){
					this.b=b;
				}
			
			}
		a):容器实例化A,B组件
		b):初始化,调用b属性的set方法

	
		2.构造器注入
			public class B{
			
			}

			public class A{
				private B b;
				
				public A(B b){
					
					this.b=b;
				}
				
			}

a):容器在实例化A组件时,必须调用有参数的构造器

自动装配
spring容器可以自动装配autowire相互协作Bean之间的关联关系,autowire可以针对单个Bean进行设置,方便之处在于减少xml注入配置

在配置文件中可以在bean标签中使用autowire属性指定自动装配规则,一共三种类型值
byName:根据属性名自动装配 根据名字查找与属性名一致的bean (setter注入)

byType:若容器中存在一个指定属性类型相同的Bean,则与此属性自动装配 (setter注入) 比byName更加严谨

Constructor:与便于Type类似,但应用于构造器注入

3.参数值注入
1)注入基本值
标签可以通过字符串指定属性或构造器参数的值,容器将字符串从java.lang.String类型转换为实际的属性或构造器参数类型,
然后给bean对象注入.

2)注入bean对象
注入外部的bean(引用方式,方便重用)

3)注入集合
通过,,,标签可以定义和设置与Java类型中对应的List,set,map以及properties的属性值

 	这些都可以通过引用方式注入:
     	  <util:list>.....
       如:(以上格式相同)	
   <util:list id="list">
   	<value>123</value>
    	<value>456</value>
   	<value>789</value>
    </util:list>

引用:

<bean id="xl" class="com.xms.entity.TestDemo">
		<!-- list集合 -->
		<property name="list" ref="list2"></property>
	</bean>

4)注入spring表达式
spring表达式语言和el表达式在语法上很相似,可以读取一个Bean对象的属性或集合中的数据

5)注入null或空字符串
spring将属性空参数当做空字符串


	如果需要注入NULL空值,可以使用<null>标签
	<bean>
		<property name="name">
			<null/>
		</property>
	</bena>

1.基于注解的依赖注入
具有依赖关系的Bean对象,可以使用以下任意一种注解实现

@Autowired/@Qualifer:可以处理构造器注入hesetter注入; 也可以写在属性上,作用和写在方法上类似,但是只会执行一行代码(赋值代码)

注意:注入对象是单例时,@Qualifer可省略,此时springanz参数类型匹配参数值

@Autowired:写在构造器或set方法前,声明需要为其注入bean。
@Qualifer:写在参数前面,声明注入bean的ID

@Resource
只能处理setter注入

@Resource也可以希望在属性上,作用和色图、方法上类似,但只执行一行代码
注意:注入是单例时,(name=“标识符”)可省略
@Inject/@Named
和@Autowired/@Qualifer用法一致,需要额外的导包。

注入基本值或spring表达值
@Value注解可以注入基本值或spring表达值、
语法:
@value(“基本值”)
@Value("#{spring表达式}")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值