A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© LPer 初级黑马   /  2019-10-10 13:53  /  1012 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Bean标签基本配置

用于配置对象交由Spring 来创建。

默认情况下它调用的是类中的无参构造函数,如果没有无参构造函数则不能创建成功。

基本属性:

id:Bean实例在Spring容器中的唯一标识

class:Bean的全限定名称
Bean标签范围配置

scope:指对象的作用范围,取值如下:

  取值范围                    说明                                      
  singleton               默认值,单例的                                 
  prototype               多例的                                    
  request                 WEB   项目中,Spring   创建一个   Bean   的对象,将对象存入到   request   域中
  session                 WEB   项目中,Spring   创建一个   Bean   的对象,将对象存入到   session   域中
  global   session        WEB   项目中,应用在   Portlet   环境,如果没有   Portlet   环境那么globalSession   相当于   session

1)当scope的取值为singleton时

      Bean的实例化个数:1个

      Bean的实例化时机:当Spring核心文件被加载时,实例化配置的Bean实例

      Bean的生命周期:

对象创建:当应用加载,创建容器时,对象就被创建了

对象运行:只要容器在,对象一直活着

对象销毁:当应用卸载,销毁容器时,对象就被销毁了

2)当scope的取值为prototype时

      Bean的实例化个数:多个

      Bean的实例化时机:当调用getBean()方法时实例化Bean

对象创建:当使用对象时,创建新的对象实例

对象运行:只要对象在使用中,就一直活着

对象销毁:当对象长时间不用时,被 Java 的垃圾回收器回收了
Bean生命周期配置

init-method:指定类中的初始化方法名称

destroy-method:指定类中销毁方法名称
Bean实例化三种方式

1) 使用无参构造方法实例化

      它会根据默认无参构造方法来创建类对象,如果bean中没有默认无参构造函数,将会创建失败

    <bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"/>

2) 工厂静态方法实例化

      工厂的静态方法返回Bean实例

    public class StaticFactoryBean {
        public static UserDao createUserDao(){   
        return new UserDaoImpl();
        }
    }

    <bean id="userDao" class="com.itheima.factory.StaticFactoryBean"
          factory-method="createUserDao" />

3) 工厂实例方法实例化

      工厂的非静态方法返回Bean实例

    public class DynamicFactoryBean {  
            public UserDao createUserDao(){        
                    return new UserDaoImpl();
            }
    }

    <bean id="factoryBean" class="com.itheima.factory.DynamicFactoryBean"/>
    <bean id="userDao" factory-bean="factoryBean" factory-method="createUserDao"/>

Bean的依赖注入入门
①创建 UserService,UserService 内部在调用 UserDao的save() 方法

    public class UserServiceImpl implements UserService {
            @Override
            public void save() {
             ApplicationContext applicationContext = new
                     ClassPathXmlApplicationContext("applicationContext.xml");                          UserDao userDao = (UserDao) applicationContext.getBean("userDao");       
              userDao.save();
             }
     }

②将 UserServiceImpl 的创建权交给 Spring

    <bean id="userService" class="com.itheima.service.impl.UserServiceImpl"/>

③从 Spring 容器中获得 UserService 进行操作

    ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
    UserService userService = (UserService) applicationContext.getBean("userService");
    userService.save();

Bean的依赖注入概念
依赖注入(Dependency Injection):它是 Spring 框架核心 IOC 的具体实现。

在编写程序时,通过控制反转,把对象的创建交给了 Spring,但是代码中不可能出现没有依赖的情况。

IOC 解耦只是降低他们的依赖关系,但不会消除。例如:业务层仍会调用持久层的方法。

那这种业务层和持久层的依赖关系,在使用 Spring 之后,就让 Spring 来维护了。

简单的说,就是坐等框架把持久层对象传入业务层,而不用我们自己去获取

3.7 Bean的依赖注入方式

①构造方法

      创建有参构造

    public class UserServiceImpl implements UserService {
    @Override
    public void save() {
    ApplicationContext applicationContext = new
                     ClassPathXmlApplicationContext("applicationContext.xml");       UserDao userDao = (UserDao) applicationContext.getBean("userDao");   
              userDao.save();
        }
     }

      配置Spring容器调用有参构造时进行注入

    <bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"/>
    <bean id="userService" class="com.itheima.service.impl.UserServiceImpl">                                 <constructor-arg name="userDao" ref="userDao"></constructor-arg>
    </bean>

②set方法

      在UserServiceImpl中添加setUserDao方法

    public class UserServiceImpl implements UserService {
        private UserDao userDao;
        public void setUserDao(UserDao userDao) {
            this.userDao = userDao;  
            }
        @Override   
        public void save() {      
                        userDao.save();
            }
    }

      配置Spring容器调用set方法进行注入

    <bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"/>
    <bean id="userService" class="com.itheima.service.impl.UserServiceImpl">
            <property name="userDao" ref="userDao"/>
    </bean>

set方法:P命名空间注入

      P命名空间注入本质也是set方法注入,但比起上述的set方法注入更加方便,主要体现在配置文件中,如下:

      首先,需要引入P命名空间:

    xmlns:p="http://www.springframework.org/schema/p"

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马