Ioc 配置的三种方式

导读:本篇文章讲解 Ioc 配置的三种方式,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

Ioc 配置的三种方式

1:xml 配置

顾名思义,就是将bean的信息配置.xml文件里,通过Spring加载文件为我们创建bean。这种方式出现很多早前的SSM项目中,将第三方类库或者一些配置工具类都以这种方式进行配置,主要原因是由于第三方类不支持Spring注解。

  • 优点: 可以使用于任何场景,结构清晰,通俗易懂
  • 缺点: 配置繁琐,不易维护,枯燥无味,扩展性差

举例:

1:配置xx.xml文件
2:声明命名空间和配置bean

<?xml version="1.0" encoding="utf-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="userDaoImpl" class="com.kuang.dao.UserDaoImpl"/>
    <bean id="mysqlImpl" class="com.kuang.dao.UserDaoMysqlImpl"/>
    <bean id="oracleImpl" class="com.kuang.dao.UserDaoOracleImpl"/>



    <bean id="UserServiceImpl" class="com.kuang.service.UserServiceImpl">
        <!--
        ref: 引用spring容器中创建好的对象
        value:具体的值,基本的数据类型;
        -->
        <property name="userDao" ref="mysqlImpl"/>



    </bean>
</beans>

2:Java 配置

将类的创建交给我们配置的JavcConfig类来完成,Spring只负责维护和管理,采用纯Java创建方式。其本质上就是把在XML上的配置声明转移到Java配置类中

  • 优点:适用于任何场景,配置方便,因为是纯Java代码,扩展性高,十分灵活
  • 缺点:由于是采用Java类的方式,声明不明显,如果大量配置,可读性比较差

举例:
1:创建一个配置类, 添加@Configuration注解声明为配置类
2:创建方法,方法上加上@bean,该方法用于创建实例并返回,该实例创建后会交给spring管理,方法名建议与实例名相同(首字母小写)。

注:实例类不需要加任何注解

//这个也是被Spring容器托管,注入到容器中,因为它本身就是一个@Compoent
//@Configuration代表这是一个配置类,就是我们之前配置的Bean.xml文件

@Configuration
//@ComponentScan("com.kuang.pojo")//扫描包

@Import(KuangConfig2.class)//引用其他的配置文件,在一个文件中;
public class KuangConfig {


    //注册这个Bean 就相当于我们之前写的Bean标签
    //这个方法的名字,就相当于Bean标签中的id属性;
    //这个方法的返回值,就相当于Bean标签中的class属性;
    @Bean("getUser")
    public User getUser(){
        return new User();//就是要返回注入到Bean的对象
    }

}

User类


//这里注解的意思是:这个类被Spring 接管了,被注册到了容器中;
//@Component
public class User {

    private String name;

    public String getName() {
        return name;
    }

    //属性的注入值
    @Value("yaoji123")
    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                '}';
    }
}

测试:

这里我们使用的是使用Java的方式配置Spring,这里是Application所有的实现方式。
在这里插入图片描述

        //注解配置
        //如果完全使用了配置类方法去做,我们就只能通过 AnnotationConfig 上下文获取容器,通过配置类的class对象加载。
        ApplicationContext context = new AnnotationConfigApplicationContext(KuangConfig.class);

        User getUser = (User) context.getBean("getUser");
        System.out.println(getUser.getName());

3:注解配置

通过在类上加注解的方式,来声明一个类交给Spring管理,Spring会自动扫描带有@Component,@Controller,@Service,@Repository这四个注解的类,然后帮我们创建并管理,前提是需要先配置Spring的注解扫描器。

  • 优点:开发便捷,通俗易懂,方便维护。
  • 缺点:具有局限性,对于一些第三方资源,无法添加注解。只能采用XML或JavaConfig的方式配置

举例:
在这里插入图片描述

1:对类添加@Component相关的注解,比如@Controller,@Service,@Repository

2:设置ComponentScan的basePackage,
比如: <context:component-scan base-package=‘tech.pdai.springframework’>,
或者: @ComponentScan(“tech.pdai.springframework”)注解,
或者: new AnnotationConfigApplicationContext(“tech.pdai.springframework”)指定扫描的basePackage.


@Controller
public class UserController {

    @Value("幺鸡2")
    public String name;


//    @Value("幺鸡")
//    public void setName(String name) {
//        this.name = name;
//    }
}


@Repository
public class UserDao {


    @Value("张三")
    public String name;


}


// 等价与:  <bean id="user" class="com.kuang.pojo.User"/>
//@Component  组件

@Component

public class User {

    public String name;

    //相当于 <property name="name" value="yaoji2"/>
    @Value("yaoji2")
    public void setName(String name) {
        this.name = name;
    }
}


@Service
public class UserService {

    @Value("Service")
    public String name;

    public void run(){
        System.out.println(name+"跑步!");
    }
    
       @Override
    public String toString() {
        return "UserService{" +
                "name='" + name + '\'' +
                '}';
    }

}

测试:

   public static void main(String[] args) {

        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");


        UserController userController = context.getBean("userController", UserController.class);
        System.out.println(userController.name);


        UserDao userDao = context.getBean("userDao", UserDao.class);
        System.out.println(userDao.name);


        User user = context.getBean("user", User.class);
        System.out.println(user.name);


        UserService userService = context.getBean("userService", UserService.class);
        System.out.println(userService);
        userService.run();

    }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/71884.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!