Spring-全注解配置

1. 全注解配置

在Java中写Xml配置Bean还是比较麻烦,因此,Spring还提供了使用注解来配置的文件。我们可以来看一下,注解是怎么来配置这个Xml的配置使用注解流程步骤

1.1. 配置context命名空间

<?xml version="1.0" encoding="UTF-8"?>
<!--添加context空间-->
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context"

	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

	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">

1.2. 第一步:配置让Spring扫描类与支持注解

<!-- 

​	@Component  普通仓库(也是组件)

​	@Repository  仓库(其实就是dao层)

​	@Service	service层

​	@Controller  控制层(servlet、action)

 -->

<!-- 进行包的扫描,去看类上面是否有相应的标签配置 -->

<context:component-scan base-package="com.cxp.spring" />

<!-- 这个不是必须的(spring3.2版本前使用) 配上后兼容性好 -->

<context:annotation-config />

1.3. 第二步:在类里面加上注解

1.3.1. Dao

@Repository

public class UserDao {

public void save(){

	System.out.println("保存数据xxxx....");

  }

}

1.3.2. Service

@Service

public class UserService {

	@Autowired

	private UserDao userDao;

	public void save(){

		userDao.save();

	}

}

1.3.3. Action

@Controller

@Scope(“prototype”)
//默认是"singleton"
public class UserAction {

	@Autowired

	private UserService userService;

	public String save(){

		userService.save();

		return "success";

	}

}

1.4. 注解配置bean的名称

1.4.1. 接口有两个实现(可能性比较少)

完成之后,大家注意,现在的配置还有一个问题,比如说我按真实情况来一个Dao接口,然后这个接口有两个实现,现在就会出问题

IUserDao (UserJdbcDaoImpl/UserJpaDaoImpl)

而我们声明的时候就是使用了IUserDao


@Service
//此时会就出错:因为Spring不知道你用的是哪一个dao的实现
public class UserService {

	@Autowired

	private IUserDao userDao;

	public void save(){

		userDao.save();

	}

}


1.4.2. 解决的方案:
//为dao生成的bean加上名称,我们在调用的时候确定名称即可。
@Repository("userJdbcDao")

public class UserJdbcDaoImpl  implements IUserDao{

	public void save(){

		System.out.println("保存数据xxxx....");

	}

}

@Repository("userJpaDao")

public class UserJpaDaoImpl  implements IUserDao{

	public void save(){

		System.out.println("保存数据xxxx....");

	}

}

1.5. 调用名称两套方案:

1.5.1. 方案一:使用@Autowired
@Service

public class UserService {@Autowired@Qualifier("userJdbcDao")private IUserDao userDao;public void save(){

​		userDao.save();}

}
1.5.2. 方案二:使用@Resource
@Service

public class UserService {@Resource(name="userJpaDao")private IUserDao userDao;public void save(){

​		userDao.save();}

}

1.6. 问题:使用哪一种注解来解决比较好?

如果你用的是Spring的注解,尽量全部使用Spring的标签


2. 使用xml版手动注入,xml自动注入还是注解版?

  • 初学使用xml版,手动注入
  • 熟练之后可以使用xml自动注入
  • 以后趋势:注解版
  • 如果是注解版,就全部使用注解(自己写类),不要混用,其它框架已经写好的类仍然使用xml进行配置
  • 如果是xml版,在测试的使用必须使用注解注入(因为测试框架使用注解版)
  • 只有自己写的类,才可以全部用注解,别人写的类使用注解必须去修改别人的源码,添加响应的注解标志
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值