编写测试类
1,编写相关的类
public interface UserDao { public void sayHello(); } public class UserDaoImpl implements UserDao { @Override public void sayHello() { System.out.println("Hello Spring..."); } }
2,配置注解扫描
<!-- 指定扫描bean包下的所有类中的注解.base-package属性是需要注解的类所在包的包名
注意:扫描包时会扫描指定报下的所有子孙包,这个bean包是我自己创建的.
-->
<context:component-scan base-package="bean"></context:component-scan>
3,在相关的类上添加注解
@Component(value="userDao") public class UserDaoImpl implements UserDao { @Override public void sayHello() { System.out.println("Hello Spring Annotation..."); } }
4,编写测试类
@Test public void demo2() { ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");//applicationContext.xml是在src下 UserDao userDao = (UserDao) applicationContext.getBean("userDao"); userDao.sayHello(); }
Spring 的 Bean 管理的中常用的注解
1 ,@Component:组件.(作用在类上)
Spring 中提供@Component 的三个衍生注解:(功能目前来讲是一致的)
* @Controller :WEB 层
* @Service :业务层
* @Repository :持久层
这三个注解是为了让标注类本身的用途清晰,Spring 在后续版本会对其增强
2,属性注入的注解:(使用注解注入的方式,可以不用提供 set 方法.)
@Value :用于注入普通类型.
@Autowired :自动装配: * 默认按类型进行装配. * 按名称注入: 如果有同一个类有两个已经注解的实例,会比较麻烦
@Qualifier:强制使用名称注入.
@Resource 相当于: @Autowired 和@Qualifier 一起使用.
3,Bean 的作用范围的注解:
@Scope:
singleton:单例
prototype:多例
4,Bean 的生命周期的配置:
@PostConstruct :相当于 init-method
@PreDestroy :相当于 destroy-method
比如:
@Component("User") @Scope(scopeName="singleton")//指定对象的作用范围singleton是单例,prototype是多例 public class User { @Value(value="***") private String name; @Value(value="19") private Integer age; //@Autowired//自动装配 //@Qualifier("car2") @Resource(name="car2") private Car car;
//中间省略了get和set方法 @PostConstruct public void init(){ System.out.println("初始化方法"); } @PreDestroy public void destory(){ System.out.println("销毁方法"); } }