八、使用注解开发
-
bean
@Component//和在xml中配置的bean效果相同 一般放在类上 public class User { public String name ="张三"; }
-
属性的注入
@Component public class User { @Value("张三") public String name; } //想等同于 <bean id="user" class="com.zhang.pojo.User"> <property name="name" value="张三"/> </bean> @Component public class User { public String name; @Value("张三") public void setName(String name) { this.name = name; } }
-
衍生的注解
@Conponet有几个衍生注解,我们在web开发中,会按照MVC三层架构分层
- dao———–@Repository
- service——–@Service
- controller——–@Controller
- 注解功能都一样,只是名字不同 区分不同的层
- 功能都是代表将某个类注册到Spring中,装配Bean
-
自动装配
上一篇已有
-
作用域
@Scope
- singleton—-单例
- prototype—-原型
-
小结
XML与注解:
- XML更加万能,适用于任何场合,维护简单方便
- 注解不是自己的类 使用不了,维护相对复杂
XML与注解最佳实践:
- XML用来管理bean
- 注解只用来属性的注入
九、使用Java的方式配置Spring
@Configuration
//这个也会Spring容器托管,注册到容器中,因为它本来就是一个@Component,configuration代表这是一个配置类 和XML文件是一样的
@Configuration
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Configuration {
@AliasFor(
annotation = Component.class
)
String value() default "";
boolean proxyBeanMethods() default true;
}
@ComponentScan
@ComponentScan("com.zhang.pojo")
//扫描包
@Bean
//注册一个Bean 相当于XML文件中的bean标签
//这个方法的名字 就相当于bean标签的id属性
// 这个方法的返回值 就相当于bean标签的class属性
@Bean
public User getUser(){
return new User();
}
测试类
@Test
public void test(){
//如果完全使用了配置类方式去做 我们需要AnnotationConfig上下文获取容器 通过配置类的class对象加载
ApplicationContext context = new AnnotationConfigApplicationContext(MyConfig.class);
User user = context.getBean("getUser", User.class);
System.out.println(user.getName());
}