zoukankan      html  css  js  c++  java
  • Spring 容器介绍

    Spring 框架的实现依赖 IoC (反向控制) 原则,更为形象的称呼是 DI (依赖注入)。相对于 Bean 直接构造依赖的对象,Spring 框架则根据 Bean之间的依赖关系创建对象,并注入到 Bean 中。

    public UserServiceImpl implements UserService {
        private CreditUserService creditUserService = new CreditUserService();
        public void order(...) {
            ...
            creditUserService.addCredit(4);
        }
    }
    

    对于上述代码,creditUserService 实例是在 UserService 对象中创建的,创建方式比较简单,调用了构造函数。如果 creditUserService 本身构造方式比较复杂,而且是个单例对象,那么会使用工厂类来实现进一步优化。

    private CreditUserService creditUserService = CreditUserServiceFactory.getService();
    

    在 Spring 框架中,如果你的 Bean 是通过 Spring 来管理的,Spring 容器则会帮你完成这些事情,开发人员需要做的仅仅是声明依赖关系。

    @Service
    public CrediUserServiceImpl implements CreditUserService {
        public void addCredit(int score) {
    
        }
    }
    
    @Service
    public UserService {
        @Autowired
        private CreditUserService creditUserService;
        public void order(...) {
            ...
            creditUserService.addCredit(4);
        }
    }
    

    Bean 通过注解 @Service 声明为一个 Spring 管理的 Bean, Spring 容器会扫名 classpath 下的所有类,找到带有 @Service 注解的 UserService 类,并根据 Spring 注解对其进行初始化和增强,如果发现此类属性 creditUserService 也有 @Autowired,则会从 Spring 容器里找一个已经初始化好的 CreditUserService ,如果没有,则先初始化。

    如何成为一个 Spring 容器管理的 Bean ? 在 Spring Boot 中依靠注解,如在类上的注解 @Controller, @Service, @Configuration 等,方法上的注解 @Bean。

    Spring 常用注解

    Spring 提供了多个注解声明 Bean 为 Spring 管理的 Bean,注解不同代表的含义不一样,但对于 Spring 容器来说,都是 Spring 管理的 Bean。

    • Controller: 声明此类是一个 MVC 类, 通常与 @RequestMapping 一起使用。
    @Controller
    @RequestMapping("/user")
    public class UserController {
        @RequestMapping("/get/{id}")
        public String getUser(@PathVariable String id) {
    
        }
    }
    
    • Service: 声明此类是一个业务处理类,通常与 @Transactional 一起配合使用
    @Service
    @Transactional
    public Class UserServiceImpl implements UserService {
        public void order(...) {
    
        }
    }
    
    • Repository: 声明此类是一个数据库或者其他NoSQL访问类。
    @Repository
    public class UserDao implements CrudDao<User,String> {
    
    }
    
    • RestController 同Controller 用于REST服务
    • Component 声明此类是一个 Spring 管理的类,通常用于无法用上述注解描述的Spring管理类
    • Configuration 声明此类是一个配置类,通常与注解 @Bean配合使用。
    @Configuration
    public class DataSourceConfig {
        @Bean(name = "dataSource")
        public DataSource datasource(Environment env) {
            HikariDataSource ds = new HikariDataSource();
            ds.setJdbcUrl(env.getProperty("spring.datasource.url"));
            ds.setUsername(env.getProperty("spring.datasource.username"));
            ds.setPassword(env.getProperty("spring.datasource.password"));
            return ds;
        }
    }
    

    如上,DataSourceConfig 是一个 Spring 容器配置类,配置了 HikariDataSource

  • 相关阅读:
    2016/01/14开始学习git:标签管理:操作标签
    2016/01/14开始学习git:标签管理:创建标签
    2016/01/14开始学习git:分支管理:多人协作
    2016/01/14开始学习git:分支管理:Feature分支
    2016/01/13开始学习git:分支管理:Bug分支
    python-pygame的触碰方法
    python游戏pygame模块画圆及鼠标拖拽移动方法介绍
    python的EasyGui模块简单用法介绍
    python用递归函数解汉诺塔游戏
    python函数的几种参数类型
  • 原文地址:https://www.cnblogs.com/dowhile/p/10382424.html
Copyright © 2011-2022 走看看