@Component
使用这一类注解,需要在xml配置文件里注册注解支持:
<context:component-scan base-package=“com.kxy”/>
扫描com.kxy
包以查找带有@Component
注解 的任何类,并将这些类注册为容器内的 Spring bean 定义
@Component:标注当前的类为Spring容器中的Bean,(把普通实体类实例化到spring容器中,相当于配置文件中的< bean id=“” class=“”/ >)
针对于三层架构的三个类,都是把类标注为Spring容器中的Bean。只不过把@Component名字更改了以下:
@controller: controller控制器层:早期的servlet(注入服务)
@service : service服务层(注入dao)
@repository : dao持久层(实现dao访问)
@Value(" ")
对Bean的注入,可以注在属性,setter之上。
@Scope(value=" ")
Scope | Value |
---|---|
singleton | 单例(默认) |
prototype | 原型(多例) |
reqeust | 同一次请求 |
session | 同一个会话级别 |
singleton 单实例的(单例)(默认) ----全局有且仅有一个实例
prototype 多实例的(多例) ---- 每次获取Bean的时候会产生一个新的实例
reqeust 同一次请求 ----request:每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP request内有效
session 同一个会话级别 ---- session:每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP session内有效
@Configuration @Bean
完全不使用 XML 来使用 Spring 容器:
public static void main(String[] args) {
ApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class);
MyService myService = ctx.getBean(MyService.class);
myService.doStuff();
}
@Configuration:标注当前类为配置类,这个配置类替代了原本的ApplicationBeans.xml文件
@Bean:标注当前方法的返回值对象,装配到spring容器中。只能用在方法上。代替原本的spring容器中的Bean标签。
现在,你不需要xml文件,仅仅只需要一个config配置类和实体类就能实现依赖注入!
@Configuration
public class Config {
@Bean//User对象相当于Bean标签的class 方法名getUser相当于Bean标签的id
public User getUser(){
return new User();//要注入的对象
}
//<Bean id="getUser" class="com.kxy.pojo.User>
// </Bean>
}
public class User {
@Value("kxy")
private String name;
public String getName() {
return name;
}
}