-->

Spring IOC

2021-01-21 02:50发布

  IOC

    控制反转 IOC Inversion Of Control 

    依赖注入 DI  Dependency Injection

          上面两个概念在Spring 环境下是同等概念,控制反转 是通过依赖注入实现的。

           所谓依赖注入指的是由容器负责创建对象和维护对象间的依赖关系,而不是通过对象本身负责自己的创建和解决自己的依赖

           依赖注入的主要目的是: 解耦 , 组合的耦合性小于继承

    Spring IoC容器(ApplicationContext) 负责创建Bean,  并通过 容器将功能类Bean 注入到你需要的Bean中。Spring提供使用 xml, 注解, java配置, groovy配置实现Bean的创建和注入

    无论是xml 配置,注解配置,还是java配置,都被称为配置元数据。 所谓元数据:即描述 数据 的数据。 元数据本身不具备任何可执行的能力,只能通过外界代码来对这些元数据进行解析后进行一些有意义操作。 Spring 容器解析这些配置元数据进行Bean 初始化, 配置, 和 管理依赖

声明Bean的注解: 

    @Component 组件: 没有明确的角色

    @Service 在业务逻辑层使用(Service层)

    @Repository 在数据访问层使用(dao层)

    @Controller 在展现层使用( MVC--> Spring MVC) 使用

注入Bean的注解:

    @Autowired : Spring 提供的注解

    @Resource : JSR-250提供的注解

    @Inject : JSR-300提供的注解

此三个注解可注解在set方法上或属性上,构造器上

    

获取IoC容器ApplicationContext: 

Spring 为不同获取IoC容器的方式提供了不同的ApplicationContext实现类

    1. xml配置方式

ApplicationContext ac = new XmlClassPathApplicationContext("classpath: bean.xml");    // 除了类路径下,还可使用文件位置( file:\\xxx\xxx.xml)

    2. 注解

ApplicationContext ac = new AnnotationConfigApplicationContext(Xxxxx.class);   传入注解配置类,即被@Configuration修饰的类

    

@Configuration : 声明当前类是一个配置类

@ComponentScan : 自动扫描包下所有使用@Service, @Controller, @Repository, @Component的类,并注册为Bean

 

Java 配置 :

    java config 是Spring 4.x 推荐的配置方式, 可以完全替代xml配置,即项目中无spring xml配置文件 。Java配置也是Spring Boot 推荐使用的方式

    java 配置是通过 @Configuration 和 @Bean 来实现的

            @Configuration : 声明当前类是一个配置类, 相当于一个Spring 配置的 xml 文件

            @Bean : 注解在方法上, 声明当前方法的的返回值为一个Bean , 即将方法的返回值放入Bean容器中,由Spring 管理 , Bean的名称是方法名           

                    public class JavaConfig{

                    @Bean 

                     public UserDao userDao(){

                            return new UserDao();

                       }

Java 配置方式的依赖注入方式:

        1. 注入UserDao的Bean的时候直接调用userDao()方法

        2. 直接将UserDao作为参数传入userService() , 只要容器中存在某个Bean, 就可以在另一个Bean的声明方法的参数中写入                                                                                                                                                               

                    @Bean

                    public UserService userService(){

                            UserService userService = new UserService():

                            userService.setUserDao(userDao());

                            return userService;

                    }
                   @Bean

                    public UserService userService(UserDao userDao){

                            UserService userService = new UserService():

                            userService.setUserDao(userDao());

                            return userService;

                    }

         

                                                                                                                                                                                                                                                                                                                                                                                               

                                                                                                                                                                                            

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

标签: