Spring配置Bean,依赖注入的方式

Spring是什么

  • spring是一个开源框架
  • Spring为简化 企业级应用开发 而生。
  • Spring是一个IOC(DI)和AOP容器框架

具体描述

  • 轻量级:spring是非侵入性的,基于spring开发的应用中的对象可以不依赖于Spring的api
  • 依赖注入(DI --dependeccy injection、IOC)
  • 面向切面编程(AOP)
  • 容器:Spring是一个容器,因为它包含并且管理应用对象的生命周期
  • 框架:spring实现了使用简单的组件配置组合成一个复杂的应用,在Spring中可以使用xml和Java注解组合这些对象
  • 一站式:在IOC和AOP的基础上可以整合各种企业应用的开源框架和优秀的第三方库(实际上spring自身也提供了展现层的SpringMVC)

啥事IOC和DI

  • IOC(Inversion of control):控制反转,思想是反转资源获取的方向 我们传统的方式是向容器请求资源,应用了IOC之后,则是容器会主动的将资源推送给给它所管理的组件,组件所要做的仅是选择一种合适的方式来接受资源
  • DI(依赖注入)是IOC的另一种表述:就是,组件会以预定好的方式(比如setter方法,构造器),以预定好的方式接受来自如容器的资源注入。

配置Bean的方式

  1. 配置形式:基于xml文件的方式;基于注解的方式
  2. Bean的配置方式:通过全类名(反射)、通过工厂方法(静态工厂方法&实例工厂方法)
  3. 依赖注入的方式:属性注入(setter);构造器注入
  4. (第二点)class:bean的全类名,通过反射的方式在IOC容器中创建Bean,所以要求Bean中必须要有无参数的构造器

ApplicationContext 代表IOC容器 ClassPathXmlApplicationContext是ApplicationContext接口的实现类,该实现类从类路径下加载配置文件

  1. 在Spring IOC容器读取Bean配置创建Bean实例之前,必须对其进行实例化。只有在容器实例化后,才可以从IOC容器获取Bean实例
  2. Spring提供了两中类型的IOC容器实现
  3. 1.BeanFactoryIOC容器的基本实现
  4. 2.ApplicationContext提供了更多的高级特性

依赖注入的方式

三种方式

  1. 属性注入
  2. 构造器注入
  3. 工厂方法注入(少用)

属性注入

  • 属性注入就是通过setter方法注入Bean的属性值或依赖的对象
  • 属性注入用的 < property > 元素,使用name属性指定Bean的属性名称,value注入属性的值
  • 属性注入实际应用中最常见
<bean id="helloworld"
	class = HelloWorld>
	<property name = "userName" value = "lee" />
</bean>

构造方法注入

  1. 通过构造方法注入Bean的属性值,保证Bean实例在实例化就可以使用
  2. 使用< constructir-arg >元素里声明属性,构造器里面没有name属性
  3. 使用构造器注入属性值 可以指定参数的位置和类型,区分重载的构造器
<bean id = "car2" class = "Car">
	<contructor-arg value="Baoma" type="java.lang.String" />
	<contructor-arg value="shanghai" type="java.lang.String" />
	<contructor-arg value="240" type="int" />
</bean>

//可以使用property的ref属性简历bean之间的引用关系
<property name = "car" ref = "car2" />
//内部bean 不能被外部引用
<property name = "car">
	<bean class = Car>
		<constructor-arg value = "福特" />
	</bean>
</property>

集合属性

  • 在Spring中可以通过一组内置的xml标签来配置集合属性
  • 配置list类型的属性,需要指定< list > 标签,标签里包含一些其他元素。这些标签可以通过< value >指定简单的常量值
    例子(可不读,需要的话来查)
<bean>
	<property name = "name" value = "lee" />
	<property name = "cars">
		<list>
			<ret bean = "car" />
			<ret bean = "car2" />
		</list>
	</property>
</bean>

配置map稍微读一下吧

<bean id = "newPerson" class = Person>
	<property name = "cars">
		<map>
			<entry key = "aa" value-ref + "car" />
			<entry key = "bb" value-ref + "car2" />
		</map>
</bean>

通过p命名空间为bean的属性赋值,需要先导入p命名空间

<bean id = "person5" class = Person p:age = "30"
                                    p:name = "lee"
                                    p:cars-ref = "cars"
</bean>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值