基于注解的IOC配置
Posted xuweiweiwoaini
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于注解的IOC配置相关的知识,希望对你有一定的参考价值。
1 明确
- 注解配置和XML配置要实现的功能都是一样的,都是要降低程序间的耦合。只是配置的形式不一样。
- 关于实际的开发中到底是使用XML还是注解,每家公司有着不同的习惯。具体问题具体分析。
2 环境搭建
2.1 导入所需要的jar包的maven坐标
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.0.RELEASE</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.17</version> </dependency> <dependency> <groupId>commons-dbutils</groupId> <artifactId>commons-dbutils</artifactId> <version>1.7</version> </dependency> <dependency> <groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> <version>0.9.5.4</version> </dependency>
2.2 使用@Component注解配置管理的资源
- IAccountService.java
package com.sunxiaping.spring5.service; import com.sunxiaping.spring5.domain.Account; public interface IAccountService { void save(Account account); }
- AcccountServiceImpl.java
package com.sunxiaping.spring5.service.impl; import com.sunxiaping.spring5.dao.IAccountDao; import com.sunxiaping.spring5.domain.Account; import com.sunxiaping.spring5.service.IAccountService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @Component("accountService") public class AccountServiceImpl implements IAccountService { @Autowired private IAccountDao accountDao; @Override public void save(Account account) { accountDao.save(account); } }
- IAccountDao.java
package com.sunxiaping.spring5.dao; import com.sunxiaping.spring5.domain.Account; /** * 账户的持久层接口 */ public interface IAccountDao { void save(Account account); }
- AccountDaoImpl.java
package com.sunxiaping.spring5.dao.impl; import com.sunxiaping.spring5.dao.IAccountDao; import com.sunxiaping.spring5.domain.Account; import org.springframework.stereotype.Component; @Component("accountDao") public class AccountDaoImpl implements IAccountDao { @Override public void save(Account account) { System.out.println("保存账户信息"); } }
- 注意:当我使用注解的时候,set方法可以不用写。
2.3 创建spring的xml配置文件并开启对注解的支持
- applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!--告知Spring创建容器的时候要扫描的包--> <context:component-scan base-package="com.sunxiaping.spring5"></context:component-scan> </beans>
2.4 测试
- 示例:
package com.sunxiaping; import com.sunxiaping.spring5.service.IAccountService; import org.junit.Before; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class spring5Test { ApplicationContext context = null; @Before public void before() { context = new ClassPathXmlApplicationContext("applicationContext.xml"); } @Test public void test() { IAccountService accountService = context.getBean("accountService", IAccountService.class); accountService.save(null); } }
3 常用注解
3.1 用于创建对象的
- 相当于<bean id="" class="">
3.1.1 @Component
- 作用:把资源让Spring来管理。相当于在XML中配置一个Bean。
3.1.2 @Controller、@Service、@Repository
- 这三个注解都是针对@Component注解的衍生注解,他们的作用及属性都是一模一样的。
- 这三个注解只不过提供了更加明确的语义化。
- @Controller注解:一般用于表现层的注解。
- @Service注解:一般用于业务层的注解。
- @Repository注解:一般用于持久层的注解。
- 细节:如果注解中有且只有一个属性要赋值,并且名称是value,value在赋值的时候可以不写。
3.2 用于注入数据
以上是关于基于注解的IOC配置的主要内容,如果未能解决你的问题,请参考以下文章