基于xml的自动装配
自动装配
根据指定的策略,在IOC容器中匹配某一个bean,自动为指定的bean中所依赖的类类型或接口类型属性赋值
模拟
controller
public class UserController { private UserService userService; public UserService getUserService() { return userService; } public void setUserService(UserService userService) { this.userService = userService; } public void saveUser(){ userService.savUser(); } }
service
public interface UserService { void savUser(); } public class UserServiceImpl implements UserService { private UserDao userDao; public UserDao getUserDao() { return userDao; } public void setUserDao(UserDao userDao) { this.userDao = userDao; } @Override public void savUser() { userDao.saveUser(); } }
dao
public interface UserDao { void saveUser(); } public class UserDaoImpl implements UserDao { @Override public void saveUser() { System.out.println("okokokokok"); } }
配置bean
使用bean标签的autowire属性设置自动装配效果
-
自动装配方式:byType
byType:根据类型匹配IOC容器中的某个兼容类型的bean,为属性自动赋值
若在IOC中,没有任何一个兼容类型的bean能够为属性赋值,则该属性不装配,即值为默认值null
若在IOC中,有多个兼容类型的bean能够为属性赋值,则抛出异常NoUniqueBeanDefinitionException
-
自动装配方式:byName
byName:将自动装配的属性的属性名,作为bean的id在IOC容器中匹配相对应的bean进行赋值
<bean id="userController" class="com.gu.spring.controller.UserController" autowire="byName"> <!-- <property name="userService" ref="userService"></property>--> </bean> <bean id="userService" class="com.gu.spring.service.impl.UserServiceImpl" autowire="byType"> <!-- <property name="userDao" ref="userDao"></property>--> </bean> <bean id="userDao" class="com.gu.spring.dao.impl.UserDaoImpl"></bean>
test
@Test public void testAutowire(){ ClassPathXmlApplicationContext ioc = new ClassPathXmlApplicationContext("spring-autowire-xml.xml"); UserController userController = ioc.getBean(UserController.class); userController.saveUser();
}
总结
/**
* 自动装配:
* 根据指定的策略,在ioc容器中匹配某个bean,自动为bean中的类类型属性或者接口类型的属性进行赋值
* 自动装备策略:
* bean标签中的 autowire=""
* 1.no,default:表示不装配,即bean中的属性不会自动匹配某个bean为属性赋值,此时属性使用默认值
* 2. byType: 跟胡要赋值的属性的类型,在ioc容器中匹配某个bean,为属性赋值
* 注意:
* a> 若通过类型没有找到任何类型匹配的bean,此时的属性不装配,使用的是默认值
* java.lang.NullPointerException
* b> 若通过类型找到了多个类型匹配的bean,此时会抛出异常
* NoUniqueBeanDefinitionException
* 总结:当使用byType实现自动装配时,ioc容器中有且只有一个类型匹配的bean能够为属性赋值
* 3. byName:将要复制的属性的属性名作为bean的id在ioc容器中匹配某个bean,为属性赋值
* 总结:当类型匹配的bean有多个时,此时可以使用byName实现自动装配
*/
over
标签:xml,装配,day123,bean,自动,赋值,public,属性 From: https://www.cnblogs.com/GUGUZIZI/p/17606848.html