bean取别名以及bean实例化的三种方法
- 使用name属性给bean取别名,在引用以及在IOC容器中获取bean的时候可以通过name属性的值来获取
<bean id="userDao" name="dao" class="com.xs.dao.impl.UserDaoImpl" scope="prototype"></bean>
实例化bean的三种方法
构造方法
构造方法是最常用的实例化bean的方法,通过构造一个无参构造方法来实现,因为无参构造方法是默认生成的,所以可以直接使用。如果没有无参构造方法,则会报错
- 创建UserDao接口,创建UserDaoImpl实现类,里面均只有一个save()的方法,里面只有一条输出语句
public class UserDaoImpl implements UserDao {
public void save() {
System.out.println("userdao save.........");
}
}
- 创建UserService接口,创建UserServiceImpl实现类
public class UserServiceImpl implements UserService {
private UserDao userDao;
public UserServiceImpl() {
System.out.println("userservice constructor");
}
}
- 在IOC容器中配置bean
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 通过配置文件的方式配置IOC容器-->
<!-- 配置Bean bean就是IOC容器管理的对象-->
<!-- 注意:这里要配置的是实现类,因为还要创建对象-->
<bean id="userDao" name="dao" class="com.xs.dao.impl.UserDaoImpl" scope="prototype"></bean>
<bean id="userService" class="com.xs.service.impl.UserServiceImpl">
</beans>
- 获取IOC容器中的bean
public class App {
public static void main(String[] args){
// 获取IOC容器 通过接口
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
UserService userService = (UserService) context.getBean("userService");
userService.save();
}
}
静态工厂
- 创建OrderDao接口,创建OrderDaoImol实现类
public class OrderDaoImpl implements OrderDao {
public void save() {
System.out.println("order dao save.......");
}
}
- 创建OrderDaoFactory静态工厂
public class OrderDaoFactory {
public static OrderDao getOrderDao(){
return new OrderDaoImpl();
}
}
- 在IOC容器中配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 使用静态工厂实例化bean-->
<bean id="orderDao" class="com.xs.factory.OrderDaoFactory" factory-method="getOrderDao"></bean>
</beans>
使用实例工厂实例化bean
实例化工厂跟静态工厂的一点区别是静态工厂方法是静态的
public class OrderDaoFactory {
public OrderDao getOrderDao(){
return new OrderDaoImpl();
}
}
<!-- 配置factory-bean-->
<bean id="orderFactory" class="com.xs.factory.OrderDaoFactory"></bean>
<!-- 配置-->
<bean id="orderDao" factory-method="getOrderDao" factory-bean="orderFactory">
</bean>
使用FactoryBean实例化bean
public class OrderFactoryBean implements FactoryBean<OrderDao> {
// 代替原始实例工厂中创建对象的方法
public OrderDao getObject() throws Exception {
return new OrderDaoImpl();
}
public Class<?> getObjectType() {
return OrderDao.class;
}
// true是单例
public boolean isSingleton() {
return false;
}
}
<!-- 方式4:使用FactoryBean实例化bean-->
<bean id="orderDao" class="com.xs.factory.OrderFactoryBean" />