Spring使用注解开发(二)

用于注入数据:

作用和XML配置文件中bean标签property标签作用一样

@Autowired
作用自动按照类型注入,只要容器中有唯一的一个bean对象类型和要注入的变量类型匹配,就注入成功
出现位置:可以是变量上,(set)方法上,属性上等等

  • 如果spring容器中没有任何bean类型和注入的变量类型匹配时则报错
  • 如果IOC容器中有多个类型匹配时(包括接口类型):
  1. 如果注入时接口类型的变量名和给定名称的bean对象不一致时则会报错
  2. 如果注入接口类型的变量名是给定名称的bean对象中的其中一个名称相对应,则spring容器会和当前bean对象匹配注入

测试:

dao接口类:

public interface AccountDao {
    
    

    void saveAccount();
}

dao实现类:

//使用注解将对象交给spring来管理
@Repository()
public class AccountDaoImpl implements AccountDao{
    
    
    public void saveAccount() {
    
    
        System.out.println("AccountDaoImpl保存了数据");
    }
}

service业务接口类:

public interface AccountService {
    
    
    void saveAccount();
}

service接口实现类:

//将该对象交给spring来管理
@Service
public class AccountServiceImpl implements AccountService{
    
    
	//使用注解自动注入
    @Autowired()
    private AccountDao accountDaoImpl;

    public void saveAccount() {
    
    
        accountDaoImpl.saveAccount();
    }
}

测试类:

public static void main(String[] args) {
    
    
        //通过ClassPathXmlApplicationContext对象加载配置文件方式将javabean对象交给spring来管理
        ApplicationContext applicationContext=new ClassPathXmlApplicationContext("bean.xml");
        //获取Spring容器中的bean对象,通过id和类字节码来获取
        AccountServiceImpl accountServiceImpl = applicationContext.getBean("accountServiceImpl", AccountServiceImpl.class);
        //执行方法
        accountServiceImpl.saveAccount();
    }

结果:

在这里插入图片描述

注意:
在这里插入图片描述

例如:

添加一个dao实现类

@Repository()
public class AccountDaoImpl1 implements AccountDao{
    
    
    public void saveAccount() {
    
    
        System.out.println("AccountDaoImpl1保存了数据");
    }
}

在这里插入图片描述

在这里插入图片描述
如果存在多个类型时,则要关注的是变量名注入

在这里插入图片描述
当注入的数据类型存在多个时,当修改变量名时
在这里插入图片描述

结果1:
在这里插入图片描述

在这里插入图片描述
结果2:
在这里插入图片描述

使用@Autowired注解时,set方法不必要了

@Qualifier

按照类中注入的基础上按照名称注入,但是不能在类成员中单独使用(可以和@Autowired结合).但是在给方法参数注入时可以使用
可以使用@Qualifier在参数前面传入一个值,代表使用的是哪个bean中name的唯一标识
属性:value:用于指定注入bean的id

例如存在多个类型相同的bean对象注入时

在这里插入图片描述

结果1:

在这里插入图片描述

在这里插入图片描述

结果2:
在这里插入图片描述

@Resource
作用:直接按照bean的id注入,可以独立使用
属性为name,赋值bean的id

测试:

在这里插入图片描述

结果1:
在这里插入图片描述
在这里插入图片描述
结果2:
在这里插入图片描述

注意:@Resource默认通过name或者bean的id方式实现,如果找不到对应的name或者bean的id,则通过类型实现注入,如果两个情况都找不到则报错

以上三个注入方式都只能注入其他bean类型的数据,而基本类型和String类型无法使用上述注解实现
集合类型的注入只能通过XML配置来实现

@Value
作用:用于注入基本类型和String类型的数据
属性:value 指定数据的值(可以使用el表达式 ${})

测试:

@Component
public class User {
    
    

	//通过Value注解注入值
    @Value("chenhui")
    public String name;

    public User(){
    
    
        System.out.println("对象被创建出来了");
    }

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

测试类:

public static void main(String[] args) {
    
    
        //通过ClassPathXmlApplicationContext对象加载配置文件方式将javabean对象交给spring来管理
        ApplicationContext applicationContext=new ClassPathXmlApplicationContext("bean.xml");
        //获取Spring容器中的bean对象,通过id和类字节码来获取
        User user = applicationContext.getBean("user", User.class);
        //执行方法
        System.out.println(user);
    }

结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45608165/article/details/113863108