Spring Bean容器

Spring Bean容器

IoC(Inversion of Control,控制反转)容器是Spring框架中最核心的组件,是构成框架最重要的内容。
IoC(Inversion of Control,控制反转)是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。
在Spring框架中,主要通过依赖注入(Dependency Injection,简称DI)来实现IoC。
在Spring中,Java对象通过IoC转化为Bean对象。所有的Bean对象基本都是由接口+实现类实现的,用户想要获取 Bean 的实例直接从 IoC 容器获取就可以了,不需要关心实现类。
目前主流的方案是通过Annotation来配置元数据。org.springframework.context.ApplicationContext 接口类定义容器的对外服务,通过这个接口,我们可以轻松的从 IoC 容器中得到 Bean 对象。我们在启动 Java 程序的时候必须要先启动 IoC 容器。
Annotation类型的IoC容器对应的类为:

org.springframework.context.annotation.AnnotationConfigApplicationContext

如果我们要启动IoC容器,可以运行如下代码:

ApplicationContext context = 
    new AnnotationConfigApplicationContext("package_name");

启动后,在这个包名下,只要引用了Spring注解的类都可以被加载。
Spring官方声明为SpringBean的注解有如下几种:

  • org.springframework.stereotype.Service
  • org.springframework.stereotype.Component
  • org.springframework.stereotype.Controller
  • org.springframework.stereotype.Repository
    只要在类上引用这些注解,就可以被IoC容器加载。
    @Component:通用的Bean注解,其余三个注解都是拓展自Component。
    @Service:作用于Service Bean。
    @Controller:作用于Web Bean。
    @Repository:作用于持久化相关Bean。
    一般情况下,我们使用@Service;如果是Web层服务就使用@Controller

完成容器的启动,下一步就要完成依赖注入。
假设现在我们要在UserService中使用PlayService服务类下的play方法,我们需要在类中建立一个setPlayService方法用于传入service对象,此时我们就需要在外部调用这个方法,才能传入PlayService对象。一旦需要依赖的服务特别多,这个代码体量就会变得很大。

UserService userService = new UserServiceImpl();
PlayService playService= new PlayServiceImpl();
userService .setPlayService(playService);

这个时候我们就可以使用依赖注入的方法来完成服务依赖的加载。

  1. 首先,在service层增加@Service注解;
@Service
public class PlayServiceImpl implementsPlayService {
......
}
  1. 在依赖此服务的业务中使用@Autowired注解注入Service Bean;
@Autowired
private PlayService playService;
  1. 注入完成,不再需要使用set方法来导入Service Bean了。

添加注解的作用,是为了让Spring项目自动管理各种实例。
所谓管理,就是用 @Service 注解把 SubjectServiceImplSongServiceImpl 等等所有服务实现,都标记成 Spring Bean ;然后,在任何需要使用服务的地方,用 @Autowired 注解标记,告诉 Spring 这里需要注入实现类的实例。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值