@Component(作用在类上)
创建对象的注解有四个:
@Component
@Repository
:用于对DAO实现类进行标注(持久层)。@Service
:用于对Service实现类进行标注(业务层)。@Controller
:用于对Controller实现类进行标注(WEB层)。
后三个注解是Spring中提供的@Component
的三个衍生注解(功能目前来讲是一样的),它们是为了让标注类本身的用途更清晰,Spring在后续的版本中会对其进行增强。
bean的作用范围的注解
@Scope
- singleton:单例,默认值
- prototype:多例
所以我们可通过注解设置创建对象是单例或者还是多实例的。这样User类的代码亦可写为:
@Service("user")
@Scope("singleton")
public class User {
public void add() {
System.out.println("add....................");
}
}
使用注解注入属性(对象)
这儿,我举个例子来说明如何使用注解注入(对象类型的)属性。
先创建业务层中的UserService类:
public class UserService {
public void add() {
System.out.println("service...........");
}
}
再创建持久层中的UserDao类:
public class UserDao {
public void add() {
System.out.println("dao................");
}
}
以上两个类都创建在cn.itcast.anno包中。我们要实现的目的是在UserService类里面调用UserDao类的方法,这样我们就要在UserService类里面得到UserDao类的对象。之前是采用xml配置文件的方式来注入属性的,本文将使用注解的方式完成注入属性的操作。
在UserService类里面定义UserDao类型属性
private UserDao userDao;
在UserService类里面定义UserDao类型的属性,由于是使用注解的方式,故不需要手动生成set方法。
进行注解方式实现属性注入
创建UserDao类的对象和UserService类的对象
@Service("userService") public class UserService { private UserDao userDao; public void add() { System.out.println("service..........."); userDao.add(); } }
@Repository("userDao") public class UserDao { public void add() { System.out.println("dao................"); } }
在UserService类里面注入UserDao类的对象,使用注解来实现。首先我使用
@Autowired
注解来实现。@Service("userService") public class UserService { @Autowired private UserDao userDao; public void add() { System.out.println("service..........."); userDao.add(); } }
注意:使用注解
@Autowired
,它不是根据名字去找Dao(也就是该部分@Service("userService")),而是默认按类型进行装配。
当然了,也可使用@Resource
注解来实现,如下:@Service("userService") public class UserService { @Resource(name="userDao") private UserDao userDao; public void add() { System.out.println("service..........."); userDao.add(); } }
注意,使用
@Resource
注解,它默认是按名称进行注入的。在实际开发中,我们也是使用@Resource
注解来注入属性的,注解@Autowired
用到的并不多。
编写测试类
在cn.itcast.anno包下编写一个TestDemo单元测试类。
public class TestDemo {
@Test
public void testService() {
ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
UserService userService = (UserService) context.getBean("userService");
System.out.println(user);
userService.add();
}
}
测试即可。