Spring 注解开发(基于 Java 的容器配置)

294 阅读2分钟

常用注解

1、声明bean的注解

注解作用
@Component 组件,没有明确的角色 (id默认就是类名的小写,即getBean("对应类名的小写" ))
@Service在业务逻辑层使用(service层)
@Repository在数据访问层使用(dao层)
@Controller在展现层使用,控制器的声明(C)

后面3个几乎和@Component 等价

2、注入bean的注解

注解作用
@Autowired由Spring提供,按照类型(byType)装配
@Qualifier由Spring提供,按照名称(byName)装配
@Resource由JSR-250提供,@Autowired和@Qualifier结合版

3、java配置类相关注解

注解作用
@Configuration声明当前类为配置类,其中内部组合了@Component注解,相当于xml形式的Spring配置(类上),替代xml中的beans标签
@Bean注解在方法上,声明当前方法的返回值为一个bean,替代xml中的bean标签方式(方法上)
@ComponentScan用于对Component进行扫描,相当于xml中的context:component-scan base-package(类上)
@WishlyConfiguration@Configuration@ComponentScan的组合注解,可以替代这两个注解

4、@Bean的属性支持

注解作用
@Scope设置Spring容器如何新建Bean实例(方法上,得有@Bean
其设置类型包括:Singleton (单例,一个Spring容器中只有一个bean实例,默认模式), Protetype (每次调用新建一个bean), Request (web项目中,给每个http request新建一个bean), Session (web项目中,给每个http session新建一个bean), GlobalSession(给每一个 global http session新建一个Bean实例)

5、@Value注解

注解作用
@Value为属性注入值(属性上)

配置一点点xml

步骤

  • 注册xml约束
<?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">
    <context:annotation-config/>
    <context:component-scan base-package="com.spring"/><!--扫描对应包中注解-->
</beans>

java

@Data
@Component//定义组件(Bean)
public class User {
    @Value("kitty")//给属性赋值
    private String name;
}

public class MyTest {//测试类
    @Test
    public void test01(){
        ApplicationContext context=new ClassPathXmlApplicationContext("annotation.xml");
        User user=context.getBean("user",User.class);
        System.out.println(user.getName());
    }
}

完全不用xml

步骤

1、创建config类代替xml

2、实例化容器用AnnotationConfigApplicationContext(MyConfig.class)

 ApplicationContext context=new AnnotationConfigApplicationContext(MyConfig.class);

样例 config

@Configuration
@ComponentScan("com.spring.pojo")
public class MyConfig {
    @Bean
    public User user(){
        return new User();
    }
}

pojo

@Data
@Component
public class User {
    @Value("kitty")
    private String name;
}

test

public class MyTest {
    @Test
    public void test01(){
        ApplicationContext context=new AnnotationConfigApplicationContext(MyConfig.class);
        User user=context.getBean("user",User.class);
        System.out.println(user.getName());
    }
}

image.png


image.png


image.png

小结

注解 在配置 Spring 方面比 XML 更好吗?

基于注解的配置的引入提出了一个问题,即这种方法是否比 XML“更好”。简短的答案是“取决于情况”。长话短说,每种方法都有其优缺点,通常,由开发人员决定哪种策略更适合他们。由于定义方式的不同,注解 在声明中提供了很多上下文,从而使配置更短,更简洁。但是,XML 擅长连接组件而不接触其源代码或重新编译它们。一些开发人员更喜欢将布线放置在靠近源的位置,而另一些开发人员则认为带注解的类不再是 POJO,而且,该配置变得分散且难以控制。