Spring学习笔记(三)----Spring的Bean管理

Spring 的 Bean 管理

Bean 实例化的三种方式

1. 配置文件

    <!-- 无参构造配置 主要方式-->
    <bean id="user" class="xin.jeson.User"/>
    <!-- 静态工厂配置 -->
    <bean id="user" class="xin.jeson.UserFactoryByStatic" factory-method="getUser"/>
    <!-- 实例工厂配置 -->
    <bean id="userFactory" class="xin.jeson.UserFactory"/>
    <bean id="user" factory-bean="userFactory" factory-method="getUser"/>

2. 调用方法

// 加载 xml
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        User user = (User)context.getBean("user");  // 获取对象
        System.out.println(user);

3. 无参构造方法创建

必须存在无参构造,默认存在,但如果声明了有参构造默认就没有无参构造

4. 使用静态工厂创建

// 构建工厂类
public class UserFactoryByStatic {
    public static User getUser() {
        return new User();
    }
}

5. 使用实例工厂创建

// 构建工厂类
public class UserFactory {
    public User getUser() {
        return new User();
    }
}

Bean 标签常用属性

  1. id:Bean 在使用时的名字
  2. class:Bean 类的全路径
  3. name:和 id 功能一样(但是 name 可以包含特殊符号,向下兼容保留属性)
  4. scope:设置类的作用范围
    • singleton默认值,单例的
    • protoype :多例的
    • request :Web 项目中,将对象存入 request 中
    • session :Web 项目中,将对象存入 session 中
    • globalSession :Web 项目中,Porlet 环境中存在,否则相当于 session

属性注入

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!-- xmlns:p 只有使用 P 命名空间注入才需要此约束 -->

    <bean id="userDao" class="xin.jeson.UserDao"/>

    <!-- 使用 setter 注入 (主要的注入方式) -->
    <bean id="user" class="xin.jeson.User">
        <property name="name" value="Jeson"/>
        <property name="userDao" ref="userDao"/>
    </bean>
    <!-- 使用有参构造注入 -->
    <bean id="user" class="xin.jeson.User">
        <constructor-arg name="name" value="Jeson"/>
        <constructor-arg ref="userDao"/>
    </bean>-->
    <!-- P 命名空间注入 -->
    <bean id="user" class="xin.jeson.User" p:name="Jeson" p:userDao-ref="userDao"/>
</beans>
    <!-- 另有注解注入 -->

注解注入

需要导入 spring-aop jar 包
配置文件中需要加入 context 约束

// applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       https://www.springframework.org/schema/context/spring-context.xsd">
    <!-- 开启扫描注解 -->
    <context:component-scan base-package="xin"/>
    <!-- 多个包可以逗号隔开,如果包太多可以直接写最大的包名字,会包含所有子包 -->

    <!-- 仅扫描属性上面的注释 -->
    <context:annotation-config/>
</beans>

创建对象有四个注解

  • @Component
  • @Controller
  • @Service
  • @Repository

单/多实例

@Scope(value="prototype")

注解注入属性

@Component(value="userDao")
public class UserDao {
    public void show() {
        System.out.println("dao");
    }
}
@Service(value="userService")
public class UserService {

    @Autowried               // 根据类的类型名字找类
    private UserDao userDao;

    @Resource(name="userDao") // 根据定义类的名字找类
    private UserDao userDao;

    public void show() {
        System.out.println("service");
        userDao.show();
    }
}
注入属性的 3 种方式
  1. Field 注入
@Autowried               // 同上示例
private UserDao userDao;
  1. 构造器注入(Spring 4.x 推荐)
private UserDao userDao;
@Autowired
public UserService(UserDao userDao) {
    this.userDao = userDao;
}
  1. Setter 注入(Spring 3.x 推荐)
private UserDao userDao;
@Autowired
public void setUserDao(UserDao userDao) {
    this.userDao = userDao;
}

配置文件和注解混合使用

配置文件中创建对象,使用注解进行属性注入

posted @ 2019-09-01 21:49  Posase  阅读(217)  评论(0编辑  收藏  举报