使用 ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
建立一個工廠,能夠用 getBean()獲取一個交給spring管理的類實例.web
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環境下使用,若是沒有這種環境,那麼他就至關於sessionspring
屬性注入:
構造方法方式: 首先須要聲明類的構造函數, 而後在配置裏面如:
<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是賦普通值用的)session
p名稱空間的方式(spring2.5之後)首先須要引入 xmlns:p="http://www.springframework.org/schema/p"
而後用p:user="user"賦值普通屬性或者用p:user-ref="user"賦值對象屬性.
SpEL的方式屬性注入:value=#{'String'},字符串類型須要用單引號,對象類型直接寫bean的id,也能夠使用對象的屬性或者方法等進行賦值.app
集合類型的屬性注入能夠這麼聲明(set, map 同理):
<property name="user">
<list>
<value>王五</value>
<value>李四</value>
</list>
</property>
在xml配置文件中引入別的配置文件 <import resource="applicationContext2.xml"/>函數
==============================================================================prototype
註解方式IOC:
須要在xml裏面配置<context:component-scan base-package="com.smile.myweb"/>component
@Component : 修飾一個類,把類交給springIOC容器(至關於<bean>), 裏面value至關於類的id.
@Controller : 衍生註解,web層
@Service : 衍生註解,業務層
@Repository : 衍生註解,持久層xml
初始化方法的註解@PostConstruct, 加在init方法上,至關於init-method
銷燬方法的註解@PreDestroy, 加在destroy方法上,至關於destroy-method對象
bean做用範圍的註解:@Scope, 默認是singleton,prototype是多例字符串
屬性注入的註解:@Value : 設置普通屬性的值@Autowired : 設置對象屬性的值(默認是按類型來注入對象的,若是須要按id注入,須要搭配@Qualifier(value="beanId")) (@Resource至關於 @Autowired+@Qualifier,裏面的name就至關於beadId,這個是spring實現的規範)