首页 > 编程语言 > 详细

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

时间:2019-09-02 00:31:32      阅读:91      评论:0      收藏:0      [点我收藏+]

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"/>
  1. 调用方法
// 加载 xml
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        User user = (User)context.getBean("user");  // 获取对象
        System.out.println(user);
  1. 无参构造方法创建

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

  2. 使用静态工厂创建
// 构建工厂类
public class UserFactoryByStatic {
    public static User getUser() {
        return new User();
    }
}
  1. 使用实例工厂创建
// 构建工厂类
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;
}

配置文件和注解混合使用

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

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

原文:https://www.cnblogs.com/qq188380780/p/11443833.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!