【1】IOC的注解注入,和xml,bean标签注入的作用是一样的,只不过注解注入更加的简洁
【2】首先,我们需要改造bean.xml,需要对约束进行改变,不然bean.xml不支持注解。
约束代码
然后我们需要加入一个context标签,来告诉Spring,我们需要在哪些包下的类用到注解注入方法,黄色字体部分,就是我们要扫描的包
【3】这时,我们就完成了注解的配置,可以在我们需要的类上,添加注解
1.@Component标签
位置:写在类前面
作用:把当前类存入到Spring容器中,和xml文件中的bean标签作用一样
属性:value:用于指定注解类的ID,当我们不写时就是类名(首字母小写)
2.@Controller:等同与Component标签,多数用于表现层
3.@Service:等同与Component标签,多数用于逻辑层
3.@Repository:等同与Component标签,多数用于持久层dao
234标签的作用是为了让我们的代码更加的清晰,可以一目了然。
这里注解方法,也可以用scope,只是scope从属性变成了标签,属性值还是singleton和prototype
当我们写完了这段代码,就表示该类,已经被加载到Spring容器中了
【4】 获取Spring容器中的对象,我们之前用xml配置的时候,注入需要用bean标签下的property标签(set注入)或者contructor-arg(构造注入)。
注解的注入
1.@Autowired
作用:自动按照类型注入,前提是,容器中只能有一个对应的类,它才能找到
书写位置:可以是变量上,也可以是方法上
细节:不需要set方法了
2.@Qualifier
要和Autowired一起使用,
作用:在 Autowired的基础上,按照类的名称注入,也就是上面我们把类用注解的方式放入Spring容器中给类起的ID。
3.@Resource,不需要任何注解的配合,需要输入bean的ID。
这样就注入了ID为accountDaoImpl2的类。
@Resource(name = "accountDaoImpl2") private IAccountDao accountDao=null;
4.@Value
作用:用于String类型和基本类型的注入
属性:value,用于指定数据的值,可以用Spring的spel表达式,
spel=${表达式}
【5】当这些都准备好了之后,我们就可以测试下我们的IOC注入
这里写法和xml配置的IOC一样,利用ContextApplication
ApplicationContext ac=new ClassPathXmlApplicationContext("bean.xml");
IAccountService accountService = (IAccountService) ac.getBean("as1");
accountService.saveAccount();
这里会有人会问,能不能把xml文件完全消除,答案是当然可以。
【6】完全消除XML配置文件,的注解注入方法
首先我们需要解决,注解方法在xml配置文件中扫描包的代码
@ComponentScan,这个标签就是解决这个问题的。其次我们还需要一个能代替bean.xml的配置类,
@Configuration是代表让这个类成为配置类。
然后@PropertySource是把我们的jdbc文件导入,这样我们就可以把下面jdbc的配置,换成利用参数代替,然后用@Value注解的el表达式给参数传参,这里我没用这个方法。
@Bean的作用和xml中的bean标签作用一致,把我们的QueryRunner数据源存入到Spring容器中
到此,我们的无xml配置文件的注解方式就结束了,至于什么时候用注解,什么时候用XML配置文件注入,完全可以根据以后公司的导向或者是项目的情况。
当我们的配置类,写完之后就可以在持久层,调用QueryRunner了。
同理,service中也可以用注解传入dao层。
表现层的使用方法还是一样,利用ContextApplication,来获取service层中的方法



