Spring-2.Java Bean以及Ioc容器

Java Bean

Java Bean是一种java开发标准。它要求类必须是具体的和公共的,并且具有无参数的构造器。Java Bean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性,可用set和get方法获取属性。
get和set方法也称为Getter和Setter.

Bean

Spring当中也有Bean的概念。spring当中的bean的要求和JavaBean是一样的,都要求类有一个无参构造函数并且是公共的,同时还有getter和setter方法。
Spring通过扫描@Bean注解将Bean放进IoC容器中以便管理。

IoC、DI、IoC容器

IoC容器是Spring的核心功能。IoC(控制反转)是面向对象中的一个设计原则,用于降低程序代码之间的耦合度。传统开发方法中,需要通过new来获取对象,而通过IoC由Spring自动初始化对象。将控制权限由应用程序转换为Spring,这就是控制反转。Ioc容器就是管理这些对象的容器。
DI(动态注入)是指IoC容器在运行期间动态地将某种依赖资源注入到对象中。

几个常用的注解

@Component@Service@Repository@Controller

这四个注解的作用都是将某个类视为Bean放在IoC容器中,如果一个类被上面注解中的一个注解标注则可以通过@Autowired注解从IoC容器中取出。
这四个注解的功能是一样的,主要用于区分类的用途。

  • @Component表示该类是软件的一个组成部分
  • @Service表示该类是一个服务类(XXXService.java)
  • @Repository表示该类是一个DAO类(XXXDao.java)
  • @Controller表示该类是一个控制器(XXXController.java)(关于控制器会在后面的教程中讲到)

@Autowired@Resource

可以通过这两个类从IoC中取出已经装配的Bean。这两个注解的区别是:

  • @Autowired默认按照类型装配,如果IoC容器中有多个同一类型的Bean,那么会报错,此时需要@Qualifier注解进行限定,指定注入的bean名称。
  • @Resource默认按照名称装配,也可以按照类型装配。
    • 如果按照名称装配需要指定name属性,name属性表示装配的对象名。如果没有指定name属性则会按照默认对象名查找(默认对象名是类名的开头字母小写形式),如果都没找到则按照类型查找。
    • @Resource也提供了type属性进行类型查找。
  • @Autowired是Spring提供的而@Resource是Java自带的
    对于一个类型一个bean的项目来说使用@Autowired更方便。

你可能感兴趣的:(Spring-2.Java Bean以及Ioc容器)