Spring注解的步骤
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,期待你的加入。 如果需要转载,请注明出处,谢谢!!
最新文章
- [LeetCode] Nth Digit 第N位
- iOS 开源项目
- html中的alt和title用法区别
- 你连Bug都抓不住,还谈什么参与感?
- 正则表达式的使用(C++)
- git学习笔记08-分支管理策略-实际上我们应该怎么应用分支
- js跳转到页面中指定的hash
- 5.css字体
- Ignore files which are already versioned
- php 上传视频的代码
- struts2使用iterator标签显示嵌套Map - 云自无心水自闲 - BlogJava
- Memory Map
- php最新版本配置mysqli
- Redis(4)---主从复制
- 查看memcached连接数
- Android EditText自定义样式
- java中常用jar包
- 如何使用Beyond Compare 对比差异文件【制作Patch(补丁包)文件】
- java JDBC (三) 修改
- Hibernate properties文件
热门文章
- 【C++ STL应用与实现】18: 怎样使用迭代器适配器
- redux 简明学习
- C# PDF Page操作——设置页面切换按钮 C# 添加、读取Word脚注尾注 C#为什么不能像C/C++一样的支持函数只读传参 web 给大家分享一个好玩的东西,也许你那块就用的到
- C#在Linux下获取文件夹信息(所在磁盘总大小,使用空间,已用空间,使用率)
- 破碎纪念---记第二次Nexus4换屏
- 有意思的RTL函数RegisterClass(在持久化中,你生成的一个新类的对象,系统并不知道他是如何来的,因此需要你注册)good
- Java 泛型 三
- windows7 RDP修改
- iOS组件化开发入门 —— 提交自己的私有库
- CAS和Oauth2的区别