Java : Spring基础 IOC
使用 applicationcontext context = new classpathxmlapplicationcontext("applicationcontext.xml");
创建一个工厂,可以用 getbean()获取一个交给spring管理的类实例.
xml配置文件:
bean标签里面id代表名字(name和id差不多,有一些区别),getbean就需要这个id.
class 代表用哪一个类生成实例对象.
init-method 可以指定对象被实例化之后执行的一个方法,需要在类里面实现这个方法
destroy-method 指定对象被销毁之前执行的方法,(前提:是单例(默认就是单例),而且在工厂关闭时才会被销毁.)
scope 代表bean的作用范围:
singleton: 默认, 单例模式
prototype: 多例模式
request: 应用在web项目中,创建之后放到request范围中
session: 应用在web项目中,创建之后放到session范围中
globalsession: 应用在web项目中,必须在porlet环境下使用,如果没有这种环境,那么他就相当于session
属性注入:
构造方法方式: 首先需要声明类的构造函数, 然后在配置里面如:
<bean id="userservice" class="com.smile.myweb.userserviceimpl" scope="prototype">
<constructor-arg name="name" value="哈哈"/>
<constructor-arg name="age" value="18"/>
</bean>
set方法方式:需要声明set方法,然后配置:
<bean id="userservice" class="com.smile.myweb.userserviceimpl" scope="prototype">
<property name="name" value="哈哈"/>
<property name="age" value="18"/>
</bean>
(注意如果属性是一个对象类型,就需要用ref来设置bean的id或name,value是赋普通值用的)
p名称空间的方式(spring2.5以后)首先需要引入 xmlns:p="http://www.springframework.org/schema/p"
然后用p:user="user"赋值普通属性或者用p:user-ref="user"赋值对象属性.
spel的方式属性注入:value=#{'string'},字符串类型需要用单引号,对象类型直接写bean的id,也可以使用对象的属性或者方法等进行赋值.
集合类型的属性注入可以这么声明(set, map 同理):
<property name="user">
<list>
<value>王五</value>
<value>李四</value>
</list>
</property>
在xml配置文件中引入别的配置文件 <import resource="applicationcontext2.xml"/>
==============================================================================
注解方式ioc:
需要在xml里面配置<context:component-scan base-package="com.smile.myweb"/>
@component : 修饰一个类,把类交给springioc容器(相当于<bean>), 里面value相当于类的id.
@controller : 衍生注解,web层
@service : 衍生注解,业务层
@repository : 衍生注解,持久层
初始化方法的注解@postconstruct, 加在init方法上,相当于init-method
销毁方法的注解@predestroy, 加在destroy方法上,相当于destroy-method
bean作用范围的注解:@scope, 默认是singleton,prototype是多例
属性注入的注解:
@value : 设置普通属性的值
@autowired : 设置对象属性的值(默认是按类型来注入对象的,如果需要按id注入,需要搭配@qualifier(value="beanid"))
(@resource相当于 @autowired+@qualifier,里面的name就相当于beadid,这个是spring实现的规范)
上一篇: 3dsMax怎么创建三维立体的长方体?
下一篇: 原生JS实现的轮播图功能详解