我们使用xml-Bean标签的配置方式和注解做对比理解


1.创建UserDao接口以及UserDao的实现类UserDaoImpl(接口代码省略)

public class UserDaoImpl implements UserDao {

    @Override
public void save1() {
System.out.println("save running...");
}
}

2.创建UserService接口以及UserServiceImpl实现类(接口代码省略)

public class UserServiceImpl implements UserService {

    private UserDao userDao;

    public void setUserDao(UserDao userDao) {
this.userDao = userDao;
} @Override
public void sava() {
userDao.save1();
}
}

3.配置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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="userDao" class="com.hao.dao.impl.UserDaoImpl"></bean> <bean id="userService" class="com.hao.service.impl.UserServiceImpl">
<property name="userDao" ref="userDao"/>
</bean>
</beans>

如果注解中有不明白的请访问我的博客中的依赖注入分析(xml配置)
4.模拟web端进行测试

public class UserController {
public static void main(String[] args) {
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
UserService service = (UserService) context.getBean("userService");
service.sava();
}
}

结果:save running…

===============================================================================================================================================================================================================================================================
然后实现注解进行操作
1.创建UserDao接口及其实现类UserDaoImpl(接口代码省略)

//<bean id="userDao" class="com.hao.dao.impl.UserDaoImpl"></bean>
@Component("userDao")
public class UserDaoImpl implements UserDao { @Override
public void save1() {
System.out.println("save running...");
}
}

注:注释掉的bean标签的内容相当于下面的表签

2.创建UserService接口及其实现类UserServiceImpl(接口代码省略)

//<bean id="userService" class="com.hao.service.impl.UserServiceImpl">
@Component("userService")
public class UserServiceImpl implements UserService {
// <property name="userDao" ref="userDao"/>
@Autowired
@Qualifier("userDao") //要注入的id值
private UserDao userDao; public void setUserDao(UserDao userDao) {
this.userDao = userDao;
} @Override
public void sava() {
userDao.save1();
}
}

3.进行web层模拟测试

public class UserController {
public static void main(String[] args) {
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
UserService service = (UserService) context.getBean("userService");
service.sava();
}
}

结果:

然后发现报错了,查看错误原因:发现是我们虽然使用了注解进行配置,但是没有告诉spring去哪里找注解,所以造成了没有创建实例


#配置组件扫描l告诉spring在哪个包下及其子包下的Bean需要进行扫描以便识别使用注解配置的类、字段和方法

<?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 https://www.springframework.org/schema/context/spring-context.xsd"> <!-- 配置组件扫描-->
<!-- spring会扫描hao包下的所有子包和该包下的所有类-->
<context:component-scan base-package="com.hao"/>
</beans>

再此测试:
结果:save running…


补充:思考我们在类前使用@Component注解,并不能分辨这是哪一层上的(dao层,servce层,controller层),所以就引入了另外三个标签进行分辨,请访问spring原始注解开发-02查看内容

最新文章

  1. python笔记1-转义字符
  2. jquery返回滚动条顶部
  3. spark读取hdfs上的文件和写入数据到hdfs上面
  4. (转) Deep Learning Research Review Week 2: Reinforcement Learning
  5. Adaboost算法初识
  6. Machine Learning - 第5周(Neural Networks: Learning)
  7. oracle表数据误删还原
  8. Custom Action : dynamic link library
  9. web前后台数据交互的四种方式(转)
  10. python标准库 difflib-比较序列
  11. 2015 多校联赛 ——HDU5363(快速幂)
  12. jQuery 素材 缩略图轮播集合
  13. go etcd
  14. Linux 下磁盘挂载
  15. 如何预览Github上的页面
  16. 解决普通用户登录ulimit 报错问题
  17. demo: 全页面CSS3动画的一个参考例子
  18. 树状数组训练题2:SuperBrother打鼹鼠(vijos1512)
  19. 【AtCoder】Dwango Programming Contest V题解
  20. http post multipart/mixed的文件.

热门文章

  1. LGP4216题解
  2. 一次苦逼的SQL注入
  3. 嵌套OOPS导致系统卡死 每个CPU都上报softlockup的问题
  4. 进制转换 Java day6
  5. MVC 生成安全验证码(例:用于登陆验证) 方法2
  6. 实现一个函数功能:sum(1,2,3,4..n)转化为 sum(1)(2)(3)(4)…(n)?
  7. Ribbon和Feign的区别?
  8. elasticsearch 索引数据多了怎么办,如何调优,部署 ?
  9. 为什么使用 Executor 框架比使用应用创建和管理线程好?
  10. 什么是 Daemon 线程?它有什么意义?