spring的注解@Autowired和@Component
注解
1、spring使⽤注解需要添加
<beans context="/schema/context"
schemaLocation="/schema/context /schema/context/spring-context-4.0.xsd"/> <annotation-config/>
@Autowired//也可以在set上使⽤,使⽤Autowired可以省略set,前提是ioc容器中存在,且符合名字byName
@Resource//java的注解
2、@Autowired和@Resource的区别
1. 都是⽤来⾃动装配的,都可以放在属性上
2. Autowired先通过byType装配, 如果我们想使⽤名称装配@Qulifier(value=“dog”)
// 如果允许对象为null,设置required = false,默认为true
@Qualifier("cat")// 指定注⼊哪个对象
@Autowired(required =false)
private Cat cat;
3. Resource先byName后byType,默认按照名称进⾏装配,名称可以通过name属性进⾏指定
@Resource(name ="dog")
private Dog dog;
3、通过配置⽂件 byType和byName
1. 配置⽂件 byType 的⽅式
<bean id="dog"class="com.kuang.pojo.Dog"/>
<bean id="cat"class="com.kuang.pojo.Cat"/>
<bean id="cat2"class="com.kuang.pojo.Cat"/>
<bean id="user" class="com.kuang.pojo.User"autowire="byType">
<property name="str"value="qinjiang"/>
</bean>
使⽤autowire byType⾸先需要保证:同⼀类型的对象,在spring容器中唯⼀。如果不唯⼀,会报不唯⼀的异常。
2. 配置⽂件 byName的⽅式
<?xml version="1.0" encoding="UTF-8"?>
spring ioc注解<beans xmlns="/schema/beans"
xsi="/2001/XMLSchema-instance"
schemaLocation="/schema/beans
/schema/beans/spring-beans.xsd">
<bean id="cat"class="com.jing.pojo.Cat"/>
<bean id="dog"class="com.jing.pojo.Dog"/>
<!--    <bean id="user" class="com.jing.pojo.User">-->
<!--        <property name="cat" ref="cat"/>-->
<!--        <property name="dog" ref="dog"/>-->
<!--        <property name="name" value="jing"/>-->
<!--    </bean>-->
<!--    增加⼀个属性  autowire="byName" 将查其类中所有的set⽅法名,将已注册符合规则的bean⾃动注⼊-->
<bean id="user1"class="com.jing.pojo.User"autowire="byName">
<property name="name"value="jing1"/>
<bean>
</beans>
使⽤ autowire byName时:
1. 将查其类中所有的set⽅法名,例如setCat,获得将set去掉并且⾸字母⼩写的字符串,即cat。
2. 去spring容器中寻是否有此字符串名称id的对象。
3. 如果有,就取出注⼊;如果没有,就报空指针异常。
4、@Component(“user”)
<!--指定注解扫描包-->
<component-scan base-package="com.kuang.pojo"/>
@Component("user")
// 相当于配置⽂件中 <bean id="user" class="当前注解的类"/>
@Scope("prototype")
public class User {
public String name;
@Value("jing")
//如果提供了set⽅法,在set⽅法上添加@value("值");
public void setName(String name){
this.name = name;
}
}
@Component三个衍⽣注解
@Controller:web层
@Service:service层
@Repository:dao层
5、@Component和@Autowired的使⽤
@Componen写在类上,相当于配置⽂件中
@Autowired写在属性上,代替setXxx⽅法,相当于配置⽂件中
<bean id="user1"class="com.jing.pojo.User"autowire="byName">
<property name="name"value="jing1"/>
</bean>
6、基于Java类进⾏配置
1、编写⼀个实体类,Dog
@Component//将这个类标注为Spring的⼀个组件,放到容器中!
public class Dog {
public String name ="狗⼦";
}
2、新建⼀个config配置包,编写⼀个MyConfig配置类
@Configuration//代表这是⼀个配置类
public class MyConfig {
@Bean//通过⽅法注册⼀个bean,这⾥的返回值就Bean的类型,⽅法名就是bean的id!// <bean id="dog" class="com.jing.pojo.Dog"/>
public Dog dog(){
return new Dog();
}
}
3、测试
@Test
public void test2(){
ApplicationContext applicationContext =
new AnnotationConfigApplicationContext(MyConfig.class);
Dog dog =(Bean("dog");
System.out.println(dog.name);
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。