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
Spring 容器介绍的更多相关文章
- Spring容器技术内幕之BeanWrapper类介绍
引言 org.springframework.beans.BeanWrapper是Spring框架中重要的组件类.BeanWrapper相当于一个代理器,Spring委托BeanWrapperwanc ...
- Spring容器技术内幕之BeanDefinition类介绍
引言 org.springframework.beans.factory.config.BeanDefinition是配置文件< bean >元素标签在容器中地内部表示.< bean ...
- Spring容器的refresh()介绍
Spring容器的refresh()[创建刷新]; 1.prepareRefresh()刷新前的预处理; 1).initPropertySources()初始化一些属性设置;子类自定义个性化的属性设置 ...
- [翻译]Spring框架参考文档(V4.3.3)-第二章Spring框架介绍 2.1 2.2 翻译--2.3待继续
英文链接:http://docs.spring.io/spring-framework/docs/current/spring-framework-reference/html/overview.ht ...
- Spring 读书笔记-----使用Spring容器(一)
pring有两个核心接口:BeanFactory和ApplicationContext,其中ApplicationContext是BeanFactory的子接口.他们都可代表Spring容器,Spri ...
- Spring读书笔记-----使用Spring容器(二)
一.使用ApplicationContext 前面介绍了,我们一般不会使用BeanFactory实例作为Spring容器,而是使用ApplicationContext实例作为容器,它增强了BeanFa ...
- 在listener或者工具中使用spring容器中的bean实例
在项目中经常遇见需要在Listener中或者工具中使用Spring容器中的bean实例,由于bean不能在stataic的类中使用. 介绍一种方式: public class SpringTool { ...
- Spring框架:Spring容器具体解释
Spring容器 Spring容器能够帮助你管理所有的Bean对象.专业术语称之为IoC控制反转.在传统的程序中.对象的生成都是由开发人员完毕的.而在控制反转中,对象的生成所有都交给框架完毕.这种优点 ...
- (转)Spring读书笔记-----使用Spring容器(二)
一.使用ApplicationContext 前面介绍了,我们一般不会使用BeanFactory实例作为Spring容器,而是使用ApplicationContext实例作为容器,它增强了BeanFa ...
随机推荐
- Java基础-内部类介绍
java内部类介绍 内部类一共分为4种 成员内部类 静态内部类 方法内部类 匿名内部类 下面我会为大家详细介绍每一个内部类!! 成员内部类 成员内部类就好像是外部类的一个成员属性,也是内部类中最常见的 ...
- Storm框架:如何消费RabbitMq消息(代码案例)
1.定义拓扑topology public class MessageTopology { public static void main(String[] args) throws Exceptio ...
- httpServletRequest中的流只能读取一次的原因
首先,我们复习一下InputStream read方法的基础知识, java InputStream read方法内部有一个,postion,标志当前流读取到的位置,每读取一次,位置就会移动一次,如果 ...
- Java的简单书写格式
在一个java源代码中只能出现一个public类,而且必须跟文件名相同 在源代码的全局域类中只有 public 和 default 两种可见度 全局域不能写代码,只能定义类 成员类的构造方法和类的可见 ...
- Nginx面试
声明:此文章非本人所 原创,是别人分享所得,如有知道原作者是谁可以联系本人,如有转载请加上此段话 1.请解释一下什么是 Nginx? Nginx是一个 web服务器和反向代理服务器,用于 HTTP.H ...
- DNS必知必会
什么是DNS? DNS服务器(Domain Name Server,域名服务器)是进行域名和与之相对应的IP地址进行转换的服务器. 基本概念 DNS服务器中保存了一张域名和与之相对应的IP地址 的表, ...
- HTML5和IOS、Android之间的交互
HTML5向IOS.Android传参: html给native传参需要注意三点: 1.判断终端设备,一般我们都是双系统开发,android和ios语言又不一样:我们需要用不同的方法给他们传递参数: ...
- linux centos7最小化安装桥接模式网络设置、xshell、xftf
一.网络连接设置1.桥接模式 使用电脑真实网卡,可以和自己的电脑连接,也可以和外部网络连接2.NAT模式 使用wmware network adapter vmnet8虚拟网卡,可以和自己的电脑连接, ...
- window 命令行
清屏 cls 启动服务 net start 服务名(nexus.mysql) 关闭服务 net stop 服务名(nexus.mysql) 删除服务 sc delete 服务名 如果服务名有空格,加引 ...
- 通过html导出PDF如何分页
每页一个DIV,加上样式page-break-inside:avoid; 即可分页了 .pdfpage{page-break-inside:avoid;} <div class="pd ...