基于注解的DI注入

1.导包

环境搭建:导入aop包(spring-aop-4.1.6.RELEASE.jar)

2.创建类

3. 创建spring.xml配置文件(必须在src目录下)

  • 该配置文件与之前的有区别,可直接在此复制。

spring.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"> <!-- bean definitions here --> <!-- 扫描使用注解的包,让使用注解的类交由spring管理-->
<context:component-scan base-package="com.yd.pojo"></context:component-scan>
</beans>

4. 在类上添加注解

@Component
public class User implements Serializable {
@Value("张三")
private String name;
@Value("18")
private int age;
@Autowired
private Account account; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public Account getAccount() {
return account;
} public void setAccount(Account account) {
this.account = account;
} @Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", account=" + account +
'}';
}
}
@Component
public class Account implements Serializable {
@Value("111")
private int aid;
@Value("20000")
private double balance; public int getAid() {
return aid;
} public void setAid(int aid) {
this.aid = aid;
} public double getBalance() {
return balance;
} public void setBalance(double balance) {
this.balance = balance;
} @Override
public String toString() {
return "Account{" +
"aid=" + aid +
", balance=" + balance +
'}';
}
}

运行代码:

public class Demo {
@Test
public void getUser(){
//获取spring配置文件生成的对象
ApplicationContext ac = new ClassPathXmlApplicationContext("spring.xml");
//通过bean的id,获取bean对象
User user = (User)ac.getBean("user");
System.out.println(user);
}
}

运行结果:

5. 总结

spring中常用的几个注解

  • @Component:表示当前修饰的类交给Spring容器管理

    • 如果类名上没加别名,则容器中的类id为类名的首字母小写名: User user = (User)ac.getBean("user");
    • 如果加别名@Component("tuser"),则容器中的id为tuser: User user = (User)ac.getBean("tuser");
  • 与@Component相同功能的还有三个衍生注解,都是用来修饰类:

    @Repository:添加在Dao实现类上

    @Service:添加在Service实现类上

    @Controller:添加在Controller类上

  • 给基本类型属性注入值使用@Value("..")

    可以放在属性上,也可以放在setXXX(..)方法上

  • 给引用类型属性注入值,使用

    • @Autowired:根据类型注入(推荐)
  • Bean作用范围的注解

    • @Scope 不写默认为singleton

      singleton :默认是单例(常用)

      prototype :原型模式(常用)

6.对比xml和注解方式区别

  • XML:可以使用任何场景

    ​ 开发中,用来注入框架实例

    ​ 基于xml操作的是.class文件

  • 注解:有些地方用不了,这个类不是自己写的(注解必须写在源代码上)

    ​ 开发中,用来注入自己写的java类

    ​ 基于注解操作的是源代码

03-Spring使用注解方式注入的更多相关文章

  1. Spring使用注解方式注入多例的方式

    目前Spring+Netty的开发方式这么火热,想把Netty注册成Spring组件就一定得用多例的方式,我不由得想吐槽明明这么常见的需求网上相关博客都少的很,这里给出Spring使用注解注入多例的方 ...

  2. 关于spring的注解方式注入默认值(转) -- 首字母小写

    1.是首字母小写 比如 UserAction对应的id是userAction 可以通过ApplicationContext 对象的act.getBean("userAction") ...

  3. mybatis源码学习--spring+mybatis注解方式为什么mybatis的dao接口不需要实现类

    相信大家在刚开始学习mybatis注解方式,或者spring+mybatis注解方式的时候,一定会有一个疑问,为什么mybatis的dao接口只需要一个接口,不需要实现类,就可以正常使用,笔者最开始的 ...

  4. EJB通过注解方式注入并使用其他EJB或者服务、配置JBoss数据源

    通过注解方式注入并使用其他EJB或者服务 真实项目EJB对象很多,EJB之间也可以互相调用, 在项目HelloWorld下新建接口Other在cn.hqu.ejb3下: public interfac ...

  5. (转)使用Spring的注解方式实现AOP的细节

    http://blog.csdn.net/yerenyuan_pku/article/details/52879669 前面我们已经入门使用Spring的注解方式实现AOP了,现在我们再来学习使用Sp ...

  6. (转)使用Spring的注解方式实现AOP入门

    http://blog.csdn.net/yerenyuan_pku/article/details/52865330 首先在Eclipse中新建一个普通的Java Project,名称为spring ...

  7. EJB通过注解方式注入并使用其它EJB或者服务、配置JBoss数据源

    版权声明:本文为博主原创文章,转载请注明出处. https://blog.csdn.net/Jerome_s/article/details/37103171 通过注解方式注入并使用其他EJB或者服务 ...

  8. spring注解方式注入

    1.通过Resource注入 1.在属性上注入 1.默认注入 即不指定spring容器里面的名字 匹配规则:先通过属性的名字查找 再通过属性类型与实现类类型匹配查找 当有两个实现类会报错 2.通过指定 ...

  9. Spring第七弹—依赖注入之注解方式注入及编码解析@Resource原理

        注入依赖对象可以采用手工装配或自动装配,在实际应用中建议使用手工装配,因为自动装配会产生未知情况,开发人员无法预见最终的装配结果. 手工装配依赖对象  手工装配依赖对象,在这种方式中又有两种编 ...

  10. spring注解方式注入bean

    用注解的方式注入bean,spring的配置文件也要增加一些约束和导入注解所在的包 applicationContext.xml <?xml version="1.0" en ...

随机推荐

  1. 项目中pom.xml的某些坐标无法加载

    项目中pom.xml的某些坐标无法加载 maven官方查找对应的坐标文件下载 https://mvnrepository.com/artifact/com.fasterxml.jackson.core ...

  2. PHP基础教程(二)

    本部分列出了在 PHP 中使用的各种运算符:算数运算符 运算符 说明 例子 结果 + Addition x=2x+2 4 - Subtraction x=25-x 3 * Multiplication ...

  3. Expected space(s) after "default" keyword-spacing

    添加空格

  4. Django中models下常用Field以及字段参数

    常见的FieldType数据库字段类型     1.AutoField:自增Field域,自动增加的一个数据库字段类型,例如id字段就可以使用该数据类型,参数中必须填入primary_key=True ...

  5. AJAX-动力节点

    AJAX(Asynchronous Javascript And Xml) 传统请求及缺点 传统的请求都有哪些? 直接在浏览器地址栏上输入URL. 点击超链接 提交form表单 使用JS代码发送请求 ...

  6. token能放在cookie中吗

    能. token一般是用来判断用户是否登录的, 它内部包含的信息有: uid(用户唯一的身份标识). time(当前时间的时间戳). sign(签名,token 的前几位以哈希算法压缩成的一定长度的十 ...

  7. Python pdb模块的使用

    野路子出生,写Python也有段时间了,一般的调试都用的print, PyCharm的debug功能也用的比较少,主要一般也用不到,第二是自己也不怎么会用. 服务器开发,本地根本没有运行的环境,前面学 ...

  8. 第一讲:selenium快速入门

    一.selenium目前住主流的web自动化测试框架: 1.资料丰富 资料丰富       2.测试岗位招聘要求,上板率非常之高       3.支持多语言(iava/ pythan/ go /js) ...

  9. vcsa7 页面出现“no healthy upstream”处理过程

    一.昨天服务器出现"no healthy upstream"错误无法登录,搜索网络给出一下的思路: 对于"no healthy upstream"的错误提示,可 ...

  10. PLC入门笔记5

    定时器指令及其应用 定时器指令介绍 设备启动预热时间.化学反应时间.电机星三角转换时间? 我们需要定时器.PLC计时器指令由时间续电器演变而来. 定时器本质是一个输出指令. 主要功能是,当输入端有能流 ...