spring 用于注入数据的注解
1、在 spring 配置文件中引入 context 约束
xmlns:context="http://www.springframework.org/schema/context"
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
2、开启注解支持
<!--开启spring 对注解的扫描,并指定被扫描的包-->
<context:component-scan base-package="com.momo.entity"/>
@Autowired
作用:自动按照类型进行自动注入。不支持id匹配。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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">
<!--开启spring 对注解的扫描,并指定被扫描的包-->
<context:component-scan base-package="com.momo.entity"/>
<bean id="cat" class="com.momo.entity.Cat"/>
<bean id="cat1" class="com.momo.entity.Cat"/>
<bean id="dog" class="com.momo.entity.Dog"/>
<bean id="user" class="com.momo.entity.User"/>
</beans>
需要注入的类。User
package com.momo.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
@Autowired
private Cat cat;
@Autowired
private Dog dog;
@Value("张三")
private String name;
}
注入成功。
如果在容器里找不到对象,就会报错。@Autowired(required = false) required 设置为 false 表示对象可以为 null。
@Autowired(required = false)
private Cat cat;
或者:
@Nullable
private Cat cat;
@Qualifier
@Autowired 根据类型自动装配。在加上@Qualifier 则可以根据byName 的方式实现自动装配。
作用:
在自动按照类型注入的基础之上,在按照bean 的id注入。
@Qualifier 不单独使用,必须和 @Autowired 一起使用。
value : 指定bean 的id
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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">
<!--开启spring 对注解的扫描,并指定被扫描的包-->
<context:component-scan base-package="com.momo.entity"/>
<bean id="cat1" class="com.momo.entity.Cat">
<property name="name" value="李四"/>
</bean>
<bean id="cat" class="com.momo.entity.Cat">
<property name="name" value="王五"/>
</bean>
<bean id="dog" class="com.momo.entity.Dog"/>
<bean id="user" class="com.momo.entity.User"/>
</beans>
package com.momo.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.lang.Nullable;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
@Autowired
@Qualifier(value = "cat1")
private Cat cat;
@Autowired
private Dog dog;
@Value("张三")
private String name;
}
还可以将注解加在 set 方法上
package com.momo.entity;
import org.springframework.beans.factory.annotation.Value;
public class Dog {
private String name;
@Value("旺财")
public void setName(String name) {
this.name = name;
}
public void eat(){
System.out.println("狗吃骨头"+name);
}
}
@Resource
@Resource 这个注解时 JAVA自带的注解。
直接按照bean 的id 注入,且只能注入 bean 类型。
name: 指定的bean 的id
package com.momo.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.lang.Nullable;
import javax.annotation.Resource;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
@Resource(name = "cat")
private Cat cat;
@Autowired
private Dog dog;
@Value("张三")
private String name;
}
@Resource 如有 指定name属性,先按照 属性进行 byName 的方式装配。
其次在进行默认的byName 方式进行装配
如果以上都不成功,则在按照 byType 的方式进行装配。
都不成功就会报异常,