Annotation
@Component:标注一个普通的Spring Bean类
@Controller:标注一个控制器组件类
@Service:标注一个业务逻辑组件类
@Repository:标注一个DAO组件类
指定了某些类作为SpringBean类使用后,最后还需要让Spring搜索指定路径,此时需要在Spring配置文件导入context Schema,并指定一个简单的搜索路径。
在spring2.5中是可以添加这个标签的,但在最新的spring3.2中这个标签不能添加
<context:component-scan base-package="com.zongheng.springtest"/>
除了上述的scan之外,还必须在要生成bean的java类上面加入如上四个之一的标注才能成为Spring的bean。
测试程序:
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
System.out.println(java.util.Arrays.toString(ctx.getBeanDefinitionNames()));//打印出所有的已经生成的bean的名称。(如:@Component)
如何注入属性?(声明:@Resource和@Autowired标签用在setXXX()和标注在Filed的作用是一样的,在Field上可以不要setXXX()的方法!)
1、使用@Resource标签,此种写法只限于Axe仅有一个实现类使用的标注进入bean的管理中去,如果有两个实现都在bean中管理,则会报错。
2、同样使用@Resource标签,此时把要ref的bean的名称写入,这样如果有多个实现的就没有问题了。
3、使用@Autowired自动装配,前提是Axe只有一个实现在bean的管理中。此种是byType方法,Sping自动寻找Axe的实例注入。如果包含多个实例,则抛出错误。
但是@Autowired private Axe[] axes的话就可以有多个实现了
4、不过使用@Autowired虽然没有name属性,但是有@Qualifier,还可以实现精确装配,如下: