Spring框架的注解使用

Spring框架的注解使用

1. 入门案例

1.1 JavaBean
//People类
@Data
public class People {
    @Autowired//Autowired默认按照bean的类型进行自动装配 byType,若类型相同再根据name进行装配
    private Cat cat;
    @Resource(name = "dog")
    private Dog dog;
    @Value("张三")
    private String name;
}

//Dog类
public class Dog {
    public void shout(){
        System.out.println("汪~");
    }
}

//Cat类
public class Cat {
    public void shout(){
        System.out.println("喵~");
    }
}
1.2 SpringIOC配置文件
<?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
       https://www.springframework.org/schema/context/spring-context.xsd">
    <!-- 对当前目录的所有包进行注解扫描 -->
    <context:component-scan base-package="org.westos"/>
	
    <bean id="cat" class="org.westos.pojo.Cat"/>
    <bean id="dog" class="org.westos.pojo.Dog"/>
    <bean class="org.westos.pojo.People" id="people"/>

</beans>
1.3 测试类
public class MyTest {
    @Test
    public void run0() throws Throwable {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        People people = context.getBean("people", People.class);
        System.out.println(people.getName());
        people.getDog().shout();
        people.getCat().shout();
    }
}
1.4 测试结果

2. 常用注解总结

  1. @Component

    作用:把资源让spring来管理,相当于在xml中配置一个bean。

    属性:value:指定bean的id。如果不指定value属性,默认bean的id是当前类的类名。首字母小写。

  2. @Controller、@Service、@Repository

    这三个注解都是Companent的衍生注解,其作用属性都一模一样。

    Controller用于表现层

    Service用于业务层

    Repository用于持久层

  3. @Autowired

    作用:默认先按照bean的类型进行自动装配 (byType),若类型相同再根据名称(byName)进行装配,但这时的对象名称必须与bean标签的id保持一致,不然就会报错。

  4. @Qualifier

    作用:在自动按照类型注入的基础之上,再按照Bean的id注入。它在给字段注入时不能独立使用,必须和@Autowire一起使用;但是给方法参数注入时,可以独立使用。

    属性:value:指定bean的id。

  5. @Resource

    作用:若有指定的name属性,则会先按照该属性进行装配。其次通过默认的byName方式进行装配,如果以上都不成功,则按照byType的方式进行自动装配。

    属性:指定bean的id

  6. @Value

    作用:只能注入基本数据类型和String类型数据。

    属性:用于指定值

  7. @Scope

    作用:指定bean的作用范围

    属性:指定范围的值,包括(singleton、prototype、request、session、globalsession)

  8. @Configuration

    作用:用于指定当前类是一个spring配置类,当创建容器时会从该类上加载注解。

    属性:value:用于指定配置类的字节码

  9. @ComponentScan

    作用:用于指定spring在初始化容器时要扫描的包。

    属性:basePackages:用于指定要扫描的包。和该注解中的value属性作用一样。

  10. @Bean

    作用:该注解只能写在方法上,表明使用此方法创建一个对象,并且放入spring容器。

    属性:name:给当前@Bean注解方法创建的对象指定一个名称(即bean的id),若没有设置id,在对象名称默认为方法名。

  11. @PropertySource

    作用:用于加载.properties文件中的配置。

    属性:value[]:用于指定properties文件位置。如果是在类路径下,需要写上classpath:

  12. @Import

    作用:用于导入其他配置类。

    属性:value[]:用于指定其他配置类的字节码。

  13. @RunWith

    作用:替换原有运行器,是Spring整合Junit特有的。

    属性:默认value:使用 SpringJUnit4ClassRunner.class

  14. @ContextConfiguration

    作用:加载指定 spring 配置文件的位置

    属性

    1. locations:加载配置文件。若在类路径下,需要写上 classpath:
    2. classes:加载配置类。为指定配置类的字节码

3. 常见问题

  • @Autowired和@Resource的区别
    1. @Autowired和@Resource都可以装配bean,都可以写在字段上,或写在set方法上
    2. @Autowired默认按照类型装配,默认要求对象必须存在,如果允许为null,可以设置它的required属性为false
    3. @Resource默认按照名称进行装配,名称通过name属性进行指定。当注解写在字段上时,默认取字段名进行名称查找;如果注解写在set方法上默认取属性名进行装配。当找不到与名称相匹配的bean时,才按照类型进行装配,需要注意的是:一旦name属性确定,就只会按照名称进行装配。
    4. @Autowired是先进行类型装配。@Resource是先进行name属性装配。
  • XML开发与注解开发的优劣
    1. XML适用于任何场景,结构清晰,便于维护
    2. 注解开发时,不是自己定义的类使用不了,但是开发简单便捷
      按照类型进行装配,需要注意的是:一旦name属性确定,就只会按照名称进行装配。
    3. Spring框架最佳的开发模式:xml 管理bean,使用注解进行属性注入(推荐)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值