Spring框架提供DI(属性注解)和IOC(类/Bean的注解)注解。

注解:标注、注入和解析、解释;标注和解释一部分代码的作用
在框架中:就是配置文件的另外一种实现方式@Type、@Taget;减少配置文件的代码量;提高开发效率

spring注解的步骤:

1、引入命名空间:

xmlns:context="http://www.springframework.org/schema/context"

    http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd

2、设置注解解析器或者设置类扫描器(两个设置一个即可)

2、设置注解解析器或者设置类扫描器(两个设置一个即可)
1、 <!--
添加注解解析器:用于依赖注入使用;不具备类扫描功能
-->
<context:annotation-config/> 2、<!--
引入注解类扫描器
指定哪些类要加载进入spring容器中
哪些类需要交给spring进行管理
功能:注解解析器功能
类扫描的功能
-->
<context:component-scan base-package="com.msit.spring.IOC.Annotation.IOC"></context:component-scan> 3、在要引入的类上标注注解
@Component
public class HelloSpring {
}
===
<bean id="helloSpring" Class="com.msit.spring.IOC.Annotation.IOC.HelloSpring"></bean> 4、在要注入的依赖对象(类的属性)上加上注解标注
@Resource
public Student stu;

DI(属性注解)注解原理:
1、加载spring配置文件;遇到Bean创建Bean
2、查找Bean的属性;如果有注解标注的属性;则利用注解解析器进行Spring容器的扫描
如果@Resource(name="stu")name不为空
则将name的值和spring容器中的Bean的ID进行匹配;匹配成功则注入
如果匹配不成功则报错
如果@Resource name属性为空“”
则将会把依赖对象的名称作为默认值和spring容器中的Bean的ID进行匹配;匹配成功则注入
@Resource
public Student stu;
就相当于@Resource(name="stu")
如果名称匹配不成功;则会按照依赖对象的类型和Bean的类型(Class)进行匹配;匹配成功则注入
如果匹配不成功则报错

第一步:配置applicationContext-annotation-di.xml

<?xml version="1.0" encoding="UTF-8"?>
<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-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd"> <!--
添加注解解析器
-->
<context:annotation-config/> <bean id="stus" class="com.msit.spring.IOC.Annotation.DI.Student">
<property name="name" value="张三"></property>
</bean>
<bean id="hellospring" class="com.msit.spring.IOC.Annotation.DI.HelloSpring"></bean>
</beans>

第二步:Student 实体类和测试类

package com.mist.IOC.entiy;
/*
* 实体类
*/
public class Studentds {
private String name;//姓名
private String age;//年纪
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
} }
package com.mist.IOC.Test;

import javax.annotation.Resource;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import com.mist.IOC.entiy.Studentds; public class HellowSpring {
//引入依赖对象
@Resource
public Studentds stu; public Studentds getStu() {
return stu;
} public void setStu(Studentds stu) {
this.stu = stu;
} public static void main(String[] args) { ApplicationContext context=new ClassPathXmlApplicationContext("com/mist/applicationContext2.xml");
HellowSpring te=(HellowSpring) context.getBean("hellowSpring");
System.out.println(te.getStu().getName());
} }

效果图:

IOC(类/Bean的注解)注解原理:
1、加载配置文件;当读取到
<context:component-scan base-package="com.msit.spring.IOC.Annotation.IOC"></context:component-scan>
回去扫描com.msit.spring.IOC.Annotation.IOC这个包下的所有标注的类(@component)
装配到spring容器中
@Component
public class HelloSpring {
}
===
<bean id="helloSpring" Class="com.msit.spring.IOC.Annotation.IOC.HelloSpring"></bean>

@Component value属性
默认值为“”;spring容器会将类的名称首字母小写其他不变作为Bean的ID
如果不为空@Component("hellospring")会以设置的值为Bean的ID

第一步:加载applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<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-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<!--
引入注解类扫描器
指定哪些类要加载进入spring容器中
哪些类需要交给spring进行管理
功能:注解解析器功能
类扫描的功能
-->
<context:component-scan base-package="com.msit.spring.IOC.Annotation.IOC"></context:component-scan> </beans>

第二步:Student 实体类和测试类

package com.mist.spring.DI;

import org.springframework.stereotype.Component;

@Component("stu")
public class Strudents {
private String name="王五";
private String password;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
} }
package com.mist.spring.DI;

import javax.annotation.Resource;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Component; @Component("testSpring")
public class TestSpring {
//引入依赖对象
@Resource
//@Autowired//按照类型查找
//@Qualifier("stus")//按照名称查找
public Strudents student; public Strudents getStudent() {
return student;
} public void setStudent(Strudents student) {
this.student = student;
} public static void main(String[] args) { ApplicationContext context=new ClassPathXmlApplicationContext("com/mist/spring/DI/applicationContext.xml");
TestSpring Hello=(TestSpring) context.getBean("testSpring");
System.out.print(Hello.getStudent().getName());
}
}

效果图:

注:

	XML和注解对比
1、XML代码量多;开发效率低;可读性强;执行效率高
2、注解配置简单;开发效率高;可读性低;执行效率相对于XML偏低;但是对于整个系统而言;影响不是太大

  

您可以通过点击 右下角 的按钮 来对文章内容作出评价, 也可以通过左下方的 关注按钮 来关注我的博客的最新动态。 

如果文章内容对您有帮助, 不要忘记点击右下角的 推荐按钮 来支持一下哦   

如果您对文章内容有任何疑问, 可以通过评论或发邮件的方式联系我: 2276292708@qq.com
欢迎加入java ios 安卓技术交流群: 306431857,期待你的加入。 如果需要转载,请注明出处,谢谢!!

  

Spring注解的步骤的更多相关文章

  1. 关于Spring注解配置的步骤

    今天分享一下 关于Spring注解配置的流程 1 导包:如下图所示 2 书写User和Car类  代码如下 package cn.lijun.bean; public class Car { priv ...

  2. Spring整合CXF步骤,Spring实现webService,spring整合WebService

    Spring整合CXF步骤 Spring实现webService, spring整合WebService >>>>>>>>>>>> ...

  3. 基于JDK动态代理和CGLIB动态代理的实现Spring注解管理事务(@Trasactional)到底有什么区别。

    基于JDK动态代理和CGLIB动态代理的实现Spring注解管理事务(@Trasactional)到底有什么区别. 我还是喜欢基于Schema风格的Spring事务管理,但也有很多人在用基于@Tras ...

  4. Spring -- <tx:annotation-driven>注解基于JDK动态代理和CGLIB动态代理的实现Spring注解管理事务(@Trasactional)的区别。

    借鉴:http://jinnianshilongnian.iteye.com/blog/1508018 基于JDK动态代理和CGLIB动态代理的实现Spring注解管理事务(@Trasactional ...

  5. Spring注解 @Configuration

    Spring注解 @Configuration 一.@Configuration的作用 二.@Configuration的Spring容器启动方式 三.不加@Configuration的@Bean的解 ...

  6. Spring 注解@Component,@Service,@Controller,@Repository

    Spring 注解@Component,@Service,@Controller,@RepositorySpring 2.5 中除了提供 @Component 注释外,还定义了几个拥有特殊语义的注释, ...

  7. Struts2+Spring3+MyBatis3整合以及Spring注解开发

     分类: Web(2)  版权声明:本文为博主原创文章,未经博主允许不得转载. 最近在做一个SpringMVC+spring+MyBatis的项目,突然想起以前自己要搭建一个Struts2+Sprin ...

  8. 【Spring实战】Spring注解配置工作原理源码解析

    一.背景知识 在[Spring实战]Spring容器初始化完成后执行初始化数据方法一文中说要分析其实现原理,于是就从源码中寻找答案,看源码容易跑偏,因此应当有个主线,或者带着问题.目标去看,这样才能最 ...

  9. 【转】【Spring实战】Spring注解配置工作原理源码解析

    一.背景知识 在[Spring实战]Spring容器初始化完成后执行初始化数据方法一文中说要分析其实现原理,于是就从源码中寻找答案,看源码容易跑偏,因此应当有个主线,或者带着问题.目标去看,这样才能最 ...

随机推荐

  1. android:“新版飞机大战”源码开源啦!

    今天10.24,为了纪念程序猿的节日,把之前写过的一个"飞机大战"的一个源码开源了. 源码地址:https://github.com/nuptboyzhb/newplanegame ...

  2. 在head里的CSS link 竟然粗如今body里了?

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcGVhY2Vfb2Zfc291bA==/font/5a6L5L2T/fontsize/400/fill/I0 ...

  3. 南阳oj 语言入门 A+B paoblem 题目477 题目844

     A+Bproblem   题目844 两个数字翻转后相加   比方10+12 翻转后01+21=22 #include<stdio.h> int main() { int ji(in ...

  4. c++运算符重载以及一些基本概念

    c++primer第四版435 1.赋值( = ), 下标( [ ] ) ,调用 (  ( )  ), 成员訪问箭头 (->)等操作符必须定义为成员,定义为非成员时,编译器报错 2. 像赋值一样 ...

  5. GraphDatabase_action

    https://neo4j.com/docs/ #https://pypi.python.org/pypi/neo4j-driver/1.5.3from neo4j.v1 import GraphDa ...

  6. 利用 C# dynamic 减少创建模型类

    C# 的 dynamic 关键字可以是C#可以像 javascript 这种弱类型语言一样具有随时可以添加属性的能力.C# 是一种强类型语言,dynamic 要摆脱类型的限制,自然是有代价的.这里不讨 ...

  7. WPF获取原始控件样式

    要获取WPF控件的原始样式,需要我们安装Blend for Visual Studio. 然后,我们打开Blend for Visual Studio,创建一个WPF项目. 然后,我们向页面拖动一个B ...

  8. uva10828

    https://vjudge.net/problem/UVA-10828 裸高斯消元... 但是要判无解和无穷解. 当出现一个环时会无解,环上每个点只有一个出边. #include<bits/s ...

  9. 手推Apriori算法------挖掘频繁项集

    版权声明:本文为博主原创文章,未经博主允许不得转载. Apriori算法: 使用一种称为逐层搜索的迭代方法,其中K项集用于搜索(K+1)项集. 首先,通过扫描数据库,统计每个项的计数,并收集满足最小支 ...

  10. 14_传智播客iOS视频教程_OC的数据类型

    对比一下OC和C差别,首先第一个是数据类型. C语言的数据类型分哪几类?C语言有哪些数据类型? 基本数据类型当然还包括int的一些修饰符.像short.long.long long.unsigned. ...