Spring IoC的xml配置

注入类型

1.构造方法注入
创建构造方法

public UserService(UserDAO userDAO) {
		super();
		this.userDAO = userDAO;
	}

构造方法注入xml配置

<bean id="u" class="com.login.dao.impl.UserDAOImpl">
 <bean id="userService" class="com.login.service.UserService">
    <constructor-arg>
           <ref bean="u"/>
    </constructor-arg>
    
    </bean>

2.set注入
拥有set方法

	public void setUserDAO(UserDAO userDAO) {
		this.userDAO = userDAO;
	}

set方法注入xml配置

 <bean id="u" class="com.login.dao.impl.UserDAOImpl">
    </bean>

    <bean id="userService" class="com.login.service.UserService">
 
    <property name="userDAO" ref="u"></property>
    </bean>

id name

name也可以表示id,但是name中可以包含特殊字符。

简单属性注入

UsersDAOImpl中有两个属性daoId和daoStatus,配置xml给属性注入值。

 <bean id="u" class="com.login.dao.impl.UserDAOImpl">
    	<property name="daoId" value="8"></property>
    	<property name="daoStatus" value="good"></property>
    </bean>

Beans的生命范围(Scope)

在xml中可以配置bean标签中的scope值设置范围。
scope取值:singleton(单列)
prototype(每次创建新的对象)

<bean id="userService" class="com.login.service.UserService" scope="prototype">
    <property name="userDAO" ref="u"></property>
    </bean>

集合注入

创建map list set 属性。

    private List<String> lists;
	private Set<String> sets;
	private Map<String,String> maps;

配置xml

<bean name="userDao" class="com.login.dao.impl.UserDAOImpl">
    	<property name="sets">
    		<set>
    		  <value>1</value>
    		  <value>2</value>
    		</set>
    	</property>
		<property name="lists">
			<list>
				<value>1</value>
				<value>2</value>
				<value>3</value>
			</list>
		</property>    	
    	<property name="maps">
    		<map>
    			<entry key="1" value="1"></entry>
    			<entry key="2" value="2"></entry>
    			<entry key="3" value="3"></entry>
    		</map>
    	
    	</property>
    
    </bean>

自定注入

spring中的autowire可以实现自动注入,在bean标签中设置autowire的值。
autowire的取值:
byname根据UserService类中属性名(所以bean中的id的一致)
byType根据bean中的class。(不能有相同的class)

<bean id="userService" class="com.login.service.UserService" autowire="byName">
</bean>

生命周期

实例化 -> 属性赋值 -> 初始化 -> 销毁。

UserService类

package com.login.service;

import com.login.dao.UserDAO;
import com.login.model.User;

public class UserService {

	private UserDAO userDAO ;
	public void init(){
		
		System.out.println("init");
	}
	
	public UserService(UserDAO userDAO) {
		super();
		this.userDAO = userDAO;
	}

	public UserDAO getUserDAO() {
		return userDAO;
	}

	public void setUserDAO(UserDAO userDAO) {
		this.userDAO = userDAO;
	}

	public void add(User u){
		
		userDAO.save();
	}
	public void destroy(){
		System.out.println("destroy");
	}
}

配置xml

 <bean id="userService" class="com.login.service.UserService" init-method="init" destroy-method="destroy">
    
    <constructor-arg>
           <ref bean="u"/>
    </constructor-arg>
    
    </bean>

Test

@Test
	public void testAdd() throws Exception {
		ClassPathXmlApplicationContext apc = new ClassPathXmlApplicationContext("beans.xml");
		UserService service = (UserService) apc.getBean("userService");
		UserService service2=(UserService) apc.getBean("userService");
		System.out.println(service==service2);
	}

Console
输出true,默认情况下创建的bean是同一个

init
true
destroy
发布了47 篇原创文章 · 获赞 5 · 访问量 2021

猜你喜欢

转载自blog.csdn.net/OVO_LQ_Start/article/details/104331047