基于注解的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 用于注入数据
相关推荐
itjavashuai 2020-07-28
smalllove 2020-07-27
willluckysmile 2020-06-29
TiDBPingCAP 2020-06-21
丽丽 2020-06-11
shenxiuwen 2020-06-10
willluckysmile 2020-06-10
MrFuWen 2020-06-09
yuanye0 2020-06-08
whbing 2020-05-19
yuanye0 2020-05-14
kong000dao0 2020-05-10
方志朋 2020-05-08
somyjun 2020-05-01
suixinsuoyu 2020-04-29
咻pur慢 2020-04-22
tianxiaolu 2020-04-06
吾日五省我身 2020-03-28