<?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.xsdhttp://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd"><!-- 开启注解扫描 --><context:component-scan base-package="com.learn.spring" ></context:component-scan></beans>
package com.learn.spring.controller;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;import com.learn.spring.service.UserService;/*** 表现层的组件* * @Controller的作用:*     等价于在xml配置文件中: <bean id="userController" class="com.learn.spring.controller.UserController"></bean>* @Controller注解默认的id值是类名首字母小写,如果想要自己指定,可以使用value属性来指定* @Controller(value="id") / @Controller("id")*/
@Controller
//@Component
public class UserController {@Autowired(required=false)  // 默认情况下,required=true,代表@AutoWired标注的属性必须被装配.//可以改为required=false,有就装配,没有就算了.private UserService userService ;public void login(){System.out.println("UserController  login .....");userService.Handlelogin();}}
package com.learn.spring.service;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;import com.learn.spring.dao.UserDao;/*** 业务层的组件**/
@Service
public class UserService {/***@AutoWired 优先采用类型的匹配的方式进行bean的装配. 如果有多个类型兼容的bean匹配了,会使用*          属性名 与bean的id值进行匹配. */@Autowired@Qualifier("userDaoMyBatisImpl") //进一步的指定要装配的bean的id值.private UserDao userDao ;public void Handlelogin(){System.out.println("UserService  handleLogin ....");//处理登录的逻辑userDao.getUserByUsernameAndPassword();}
}
package com.learn.spring.dao;public interface UserDao {public void getUserByUsernameAndPassword();   }
package com.learn.spring.dao;import org.springframework.stereotype.Repository;@Repository
public class UserDaoJdbcImpl  implements UserDao{public void getUserByUsernameAndPassword(){System.out.println("UserDaoJdbcImpl getUserByUsernameAndPassword......");}
}
package com.learn.spring.test;import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;import com.learn.spring.controller.UserController;
import com.learn.spring.dao.UserDao;
import com.learn.spring.service.UserService;public class TestAnnotation {public static void main(String[] args) {//.1实例化ioc容器ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");//2.获取beanUserController  userController =(UserController) ctx.getBean("userController");System.out.println("userController:" + userController);userController.login();}
}

基于注解的方式装配bean相关推荐

  1. 【Spring5】004-IOC容器+基于注解的方式实现Bean管理

    文章目录 1.什么是注解 2.Spring 针对 Bean 管理中创建对象提供的注解 3.基于注解方式实现对象创建 3.1.执行流程介绍 4.开启组件扫描配置的细节问题 5.基于注解方式实现属性注入 ...

  2. 基于注解的方式配置bean

    在 classpath 中扫描组件 组件扫描(component scanning):  Spring 能够从 classpath 下自动扫描, 侦测和实例化具有特定注解的组件. 特定组件包括: @C ...

  3. Spring基于注解的自动装配

    Spring基于注解的自动装配 基于XML的自动装配是在配置文件的bean里设置autowire属性,有byType,byName的方式.而基于注解的自动装配同样是这样只不过我们直接在成员变量上直接标 ...

  4. Spring基于注解的方式一

    Spring基于注解的方式一 Spring注解简介 之前的时候我们学习的Spring都是基于Spring配置文件的形式来编写,现在很多的情况下使用SpringBoot的时候是基于注解的形式,这里我们首 ...

  5. 基于注解的方式实现分布式锁

    基于注解的方式实现分布式锁 关于分布式锁的实现由两种 基于redis 基于zookeeper 为了方便分布式锁的使用, 基于注解的方式抽取成公用组件 DisLock注解 /*** 分布式锁的注解, 通 ...

  6. Spring基于注解的方式二

    Spring基于注解二 上一次介绍了很多的关于spring的基本的注解,这篇文章描述一下关于Spring注解的基本的原理,从简单的例子入手 @Configuration @Import({Color. ...

  7. 3、基于注解的IoC装配与依赖注入

    一.XML开启注解支持 1.添加context名称空间 <?xml version="1.0" encoding="UTF-8"?> <bea ...

  8. Spring配置形式之基于注解的方式

    在classpath中扫描组件 组件扫描(component scanning): Spring 能够从 classpath 下自动扫描, 侦测和实例化具有特定注解的组件. 特定组件包括: @Comp ...

  9. Spring常用注解,自动扫描装配Bean

    1 引入context命名空间(在Spring的配置文件中),配置文件如下: Xml代码 xmlns:context="http://www.springframework.org/sche ...

最新文章

  1. SQL Server数据类型
  2. 培训第二弹 全国大学生智能汽车竞赛百度竞速组预告
  3. Appium+Robotframework实现Android应用的自动化测试-2:Windows中启动Appium和模拟器
  4. [SimplePlayer] 1. 从视频文件中提取图像
  5. php 导出excel 特殊字符,PHPEXCEL导出,存在特殊字符遇到的问题
  6. 声明了包的类Java命令找不到或无法加载主类
  7. 数中唯一只出现一次的数字
  8. (APP测试三板斧)第一板:Xposed+JustTrustMe绕过SSL Pining
  9. 利用比值判敛法求收敛半径的问题
  10. windows下删除文件:提示无法删除文件,无法读源文件或磁盘
  11. 2022阿里巴巴云栖大会
  12. 零基础学习C++系列课程(九) 持续更新中
  13. xxl-job快速入门
  14. java怎么给文件加密_java中如何给文件加密
  15. 【HDR学习】苹果EDR技术洞察(二)
  16. Android 图片压缩技术
  17. 充电宝GB4943检测标准与项目介绍
  18. Craig S. Wright问答系列(1)
  19. 《MongoDB》 数组操作
  20. 基于spring boot 的学生科研项目共享平台 毕业设计-附源码271611

热门文章

  1. Codeforces 918D/917B - MADMAX
  2. android 自己定义水平和圆形progressbar 仅仅定义一些style就能够
  3. bootstrap bootstrapTable 隐藏列
  4. 搜集到的数学分析例题(不断更新)
  5. IOS开发报错之Undefined symbols for architecture armv6
  6. 【Hibernate】getHibernateTemplate与getSession的区别以及优缺点
  7. 《数据科学R语言实践:面向计算推理与问题求解的案例研究法》一一2.3 数据清洗和变量格式化...
  8. 排除瓶颈和加速django项目
  9. AsyncTask的理解
  10. Jenkins学习七:Jenkins的授权和访问控制