zoukankan      html  css  js  c++  java
  • 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;
    }
    

    配置文件和注解混合使用

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

  • 相关阅读:
    python中的继承和多态
    python中的深浅copy
    面向对象初识
    常用模块,异常处理
    递归,re,time,random
    内置函数,匿名函数
    生成器和迭代器
    记一次nginx由于文件过大的相关问题
    vue的Element+gin实现文件上传
    Vue问题汇总
  • 原文地址:https://www.cnblogs.com/qq188380780/p/11443833.html
Copyright © 2011-2022 走看看