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