Spring基本概念和Bean的操作

Spring基本概念和Bean的操作

Spring概念

1、Spring是一个开源的框架。
2、Spring可以师简单的JavaBean实现以前只有EJB才能实现的功能。
3、Spring是一个IOC容器框架。
4、Spring 是java/javaee 一站式框架

Spring特点

1、轻量级
2、依赖注入
3、面向切面编程
4、容器
5、一站式

※Spring 所需jar包

 <dependencies> 
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>5.2.0.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>5.2.0.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-beans</artifactId>
			<version>5.2.0.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-expression</artifactId>
			<version>5.2.0.RELEASE</version>
		</dependency>
	</dependencies>

IOC以及Bean的配置

什么是IOC?

Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。理解好Ioc的关键是要明确“谁控制谁,控制什么,为何是反转(有反转就应该有正转了),哪些方面反转了”。
用更通俗的话来说,IoC就是指对象的创建,并不是在代码中用new操作new出来的,而是通过Spring进行配置创建的。

IoC能做什么?

IoC不是一种技术,只是一种思想,一个重要的面向对象编程的法则,它能指导我们如何设计出松耦合、更优良的程序。传统应用程序都是由我们在类内部主动创建依赖对象,从而导致类与类之间高耦合,难于测试;有了IoC容器后,把创建和查找依赖对象的控制权交给了容器,由容器进行注入组合对象,所以对象与对象之间是松散耦合,这样也方便测试,利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活。

如何配置Bean

我们可以在applicatonContext.xml中通过bean节点来配置bean.
例如:

	<bean id="daughter" class="spring.ioc.com.factory.Daughter" />
	
	<bean id="son" class="spring.ioc.com.factory.Son" />
	
※Bean的属性ID

1、在 IOC 容器中必须是唯一的
2、若 id 没有指定,Spring 自动将权限定性类名作为 Bean 的名字
3、id 可以指定多个名字,名字之间可用逗号、分号、或空格分隔

Bean的作用域

Spring提供了4种作用域,它会根据情况决定是否生成新的对象。
单例(singleton):它是默认选项,整个应用中Spring只生成一个Bean的实例;
原型(prototype):每次注入或者通过SpringIoc容器获取Bean时,Spring都会为它创建一个新实例;
会话(session) :一个Session中,Spring只会创建一个实例;
请求(request) :一次请求中Spring会创建一个实例,不同的请求会创建不同的实例。

Spring IOC可以管理Bean的生命周期,其过程为
  1. 通过构造或工厂方法创建 Bean 实例
  2. 为 Bean 的属性设置值和对其他 Bean 的引用
  3. 调用 Bean 的初始化方法
  4. 使用Bean
  5. 当容器关闭时,调用Bean的销毁方法

※Bean的注入依赖方式

1、属性注入
  • 属性输入即通过setter方法注入Bean的属性或依赖的对象
  • 属性注入 < property>元素,使用name属性指定Bean的属性名称,value属性或< value> 子节指定属性值。

示例:

 <bean id="userService" class="com.zzxt.springboot.ioc.di.UserService">
   		<property name="udao" ref="userDao"></property> 		
		<property name="userName" value="Tom" ></property>   		
   			 同理:
   				可以使用<property name="userName"><value>Tom</value></property>
   		 
   		<property name="age" value="21"></property>
   		<property name="whight" value="90.5"></property>
   </bean>

步骤如下:
1、在目标bean类文件中将属性生成setter方法
2、在spring配置文件中配置目标bean的属性依赖,通过标签标签property name属性表示bean的属性名,使用 value配置属性值,(当值为引用类型需要使用ref属性)

2、构造器注入
  1. 通过构造方法注入Bean的属性值或依赖的对象,他保证了Bean实例在实例化后就能够使用。
  2. 构造器注入在< constructor-arg>元素里声明属性。

方法如下:
1、按照参数的顺序,需要使用属性index, index从0开始

   <bean id="userService" class="com.zzxt.springboot.ioc.di.UserService">
  		<constructor-arg index="0" ref="userDao"></constructor-arg>
  		<constructor-arg index="1" value="19"></constructor-arg>
  		<constructor-arg index="2" value="23.7"></constructor-arg>
  		<constructor-arg index="3" value="老王"></constructor-arg>   		
  </bean>

2、按照参数类型的顺序,进行注入:使用属性type,基本数据类型直接写类型名称

     <bean id="userService" class="com.zzxt.springboot.ioc.di.UserService">
   		<constructor-arg type="com.zzxt.springboot.ioc.di.UserDao" ref="userDao"></constructor-arg>
   		<constructor-arg type="int" value="21"></constructor-arg>
   		<constructor-arg type="double" value="21.0"></constructor-arg>
   		<constructor-arg type="String" value="老王"></constructor-arg>   		
   </bean>

注:注入依赖对象可以采用手工装配或自动装配,在实际应用中建议使用手工装配,因为自动装配会产生未知情况,开发人员无法预见最终的装配结果。

Bean是可继承的
<!-- bean可以有继承关系 -->
   <bean id="userDao" class="com.zzxt.springboot.ioc.di.UserDao">
   		<property name="userName" value="Tom"></property>
   		<property name="dbName" value="mysql"></property>
   </bean>
   
   <bean id="subUserDao" parent="userDao">
   		<property name="dbName" value="zero"></property>
   </bean>
可以设置内置Bean
 <!--   可设置内置bean
     <bean id="userService" class="com.zzxt.springboot.ioc.di.UserService">
   		<property name="apple">
   			<bean class="com.zzxt.springboot.ioc.di.Apple"></bean>
   		</property>		
	</bean>
   -->

注:标记※的内容为重点

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值