Spring框架使用规范和IOC的开发

Spring框架是一个管理对象的容器,就像Web容器Tomcat可以管理servlet的生命周期,Spring容器可以管理对象的生命周期。

Spring的组件化让类和类对象之间的关系变得不那么紧密,降低了耦合度。

Spring的IOC的XML开发

IOC容器:Spring的IOC容器在最底层实际上就是一个对象的工厂,该工厂在程序中的实现是ApplicationContext这个接口, 因此使用spring创建对象的时候首先需要创建spring的工厂(new ClassPathXMLApplicationContext())。

DI:为需要的属性赋值就是依赖注入的过程。

注入方式:
①property标签:通过set方法赋值(注入)

< property name="属性名" value="属性值" >< /property>

②contructor-arg标签:通过构造器赋值(注入),必须有对应的构造器才能注入

< contructor-arg value="构造器的值1" index="0">< /contructor-arg>
< contructor-arg value="构造器的值2" index="1" type="">< /contructor-arg>
(通过索引指定参数位置)
< contructor-arg value="构造器的值3" index="2">< /contructor-arg>

③p命名空间为类的属性赋值:

<bean id="" class="" p:属性名1="" p:属性名2=""> </bean>

属性的赋值方式:
①value:通过value可以赋值给字面量的值,包括所有的基本数据类型,基本数据类型的包装类,string类型等.
②ref:可以把当前spring管理的某一个bean对象赋值给该属性.
③集合属性的赋值:

 < property name="属性名"  >
		< list>
	字面量:		<value></value>
	引用数据类型:<ref  bean=""/>
	< /list>
< /property>

④数组属性的赋值:

 < property name="属性名"  >
		< array>
	字面量:		<value></value>
	引用数据类型:<ref  bean=""/>
	    < /array>
< /property>

⑤map属性的赋值:

 < property name="属性名"  >
		< map>
			<!-- map里面一个entry代表一个键值对 -->
			<entry>
					<key>
						<value></value>
					</key>
					<value></value>
			</entry>
			<entry>
					<key>
						<value></value>
					</key>
					<value></value>
			</entry>
	    < /map>
< /property>

bean管理对象的作用域:

若spring通过单例的方法管理对象,会在工厂容器初始化时就创建该对象,调用该类的构造器;若是多例的方式,则会在使用时创建

bean管理对象的生命周期:
① 创建对象:调用类的构造器
②依赖注入:依赖注入属性
③初始化方法:
④对象的使用:使用对象调用方法
⑤对象的销毁:spring容器的关闭

bean加载资源文件到spring容器中:

<!-- db.properties文件放在src下 -->
<context:property-placeholder location="classpath:db.properties"/>

bean使用资源文件:使用${jdbc.属性名}的方式:

<bean id="datasource" class="com.alibaba.druid.pool.DruidDataSource"> 
	<property name="driverClassName" value="${jdbc.driver}"></property>
	<property name="url" value="${jdbc.url}"></property>
	<property name="username" value="${jdbc.username}"></property>
	<property name="password" value="${jdbc.password}"></property>
</bean>

bean的自动装配:通过autowire属性:
autowire:设置了该属性后,spring就可以通过某种方式自动为属性赋值.

autowire=“byName”:根据名称自动装配,引用数据类型bean的id只要和该bean要赋值的属性名一致就可以自动赋值.

autowire=“byType”:根据类型自动装配,引用数据类型bean的类型只要和该bean要赋值的属性类型一致就可以自动赋值.

Spring的IOC的注解开发

使用注解来标识一个bean,并开启组件包扫描:

在需要交给spring管理的类上使用@Controller|@Service|@Repository,相当于在spring配置文件中配置了该类的bean.

import org.springframework.stereotype.Controller;

@Controller(value="")
//为自动生成的bean指定id
public class UserController {

}
<context:component-scan base-package="com.sms.spring"></context:component-scan>

接口和抽象类不能进行实例化,在类上面加了注解就相当于在xml配置文件中添加了< bean>,因此所有注解应该放在实现类上.

开启组件包扫描:扫描包下所有的类上的注解,这些类会自动在spring的配置文件中生成对应的bean,这些bean的id会以类的首字母小写为值.

扫描组件的包含:注意要将默认的扫描关闭.use-default-filters=“false”

	<context:component-scan base-package="com.sms.spring" use-default-filters="false">
		<context:include-filter type="annotation" expression="注解的全类名"/>
	</context:component-scan>

扫描组件的排除:注意要将默认的扫打开.use-default-filters=“true”

	<context:component-scan base-package="com.sms.spring" use-default-filters="false">
		<context:exclude-filter type="annotation" expression="注解的全类名"/>		
	</context:component-scan>

基于注解的自动属性注入: 使用@autowired

其中自动装配的属性的类型UserService需要和spring中已有的bean的类型保持一致,其中UserServiceImpl已经过扫描,因此可以进行属性的自动注入.

@Controller
public class UserController {
	
	@Autowired
	private UserService userService;

}

基于注解的自动属性注入的设置: 通过@Autowired + @Qulaifier(value=“id名”)

指定spring容器中bean的id等于id名的那个bean赋值给该属性.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值