03-Spring使用注解方式注入

Posted on 2021-06-12 22:35  萌栈师  阅读(181)  评论(0编辑  收藏  举报

基于注解的DI注入

1.导包

环境搭建:导入aop包(spring-aop-4.1.6.RELEASE.jar)

2.创建类

3. 创建spring.xml配置文件(必须在src目录下)

  • 该配置文件与之前的有区别,可直接在此复制。

spring.xml: 添加配置扫描组件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- bean definitions here -->
    
    <!-- 扫描使用注解的包,让使用注解的类交由spring管理-->
	<context:component-scan base-package="com.yd.pojo"></context:component-scan>
</beans>

4. 在类上添加注解

@Component
public class User implements Serializable {
    @Value("张三")
    private String name;
    @Value("18")
    private int age;
    @Autowired
    private Account account;


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Account getAccount() {
        return account;
    }

    public void setAccount(Account account) {
        this.account = account;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", account=" + account +
                '}';
    }
}
@Component
public class Account implements Serializable {
    @Value("111")
    private int aid;
    @Value("20000")
    private double balance;

    public int getAid() {
        return aid;
    }

    public void setAid(int aid) {
        this.aid = aid;
    }

    public double getBalance() {
        return balance;
    }

    public void setBalance(double balance) {
        this.balance = balance;
    }

    @Override
    public String toString() {
        return "Account{" +
                "aid=" + aid +
                ", balance=" + balance +
                '}';
    }
}

运行代码:

public class Demo {
    @Test
    public void getUser(){
        //获取spring配置文件生成的对象
        ApplicationContext ac = new ClassPathXmlApplicationContext("spring.xml");
        //通过bean的id,获取bean对象
        User user = (User)ac.getBean("user");
        System.out.println(user);
    }
}

运行结果:

5. 总结

spring中常用的几个注解

  • @Component:表示当前修饰的类交给Spring容器管理

    • 如果类名上没加别名,则容器中的类id为类名的首字母小写名: User user = (User)ac.getBean("user");
    • 如果加别名@Component("tuser"),则容器中的id为tuser: User user = (User)ac.getBean("tuser");
  • 与@Component相同功能的还有三个衍生注解,都是用来修饰类:

    @Repository:添加在Dao实现类上

    @Service:添加在Service实现类上

    @Controller:添加在Controller类上

  • 给基本类型属性注入值使用@Value("..")

    可以放在属性上,也可以放在setXXX(..)方法上

  • 给引用类型属性注入值,使用

    • @Autowired:根据类型注入(推荐)
  • Bean作用范围的注解

    • @Scope 不写默认为singleton

      singleton :默认是单例(常用)

      prototype :原型模式(常用)

6.对比xml和注解方式区别

  • XML:可以使用任何场景

    ​ 开发中,用来注入框架实例

    ​ 基于xml操作的是.class文件

  • 注解:有些地方用不了,这个类不是自己写的(注解必须写在源代码上)

    ​ 开发中,用来注入自己写的java类

    ​ 基于注解操作的是源代码

Copyright © 2024 萌栈师
Powered by .NET 9.0 on Kubernetes