SpringIOC学习笔记(二)---------注解实现IOC

7 篇文章 0 订阅

一、相关概念

半配置-智能绑定

        Java和XML是天作之合,所以在Java的世界中总是少不了XML。在框架中很多时候,我们的工作都是在配置XML文件。在配置越来越多的时候,其灵活性的优点被繁琐的这个弱点所打败。越来越多的开发会觉得XML的配置是一种拖累。于是现在的后期的框架会逐步的减少对XML的配置,就是“零配置”。
        首先先介绍一种半配置的方式,这种半配置的方式用来解决的是Bean容器的其中一个功能;注入依赖。它就是智能绑定方式注入,算是依赖注入的一种。前面有个例子整体的配置如下:

<bean id="empDao" class="com.iflytek.emp.dao.EmployeeDao"></bean>
  <bean id="empService" class="com.iflytek.emp.service.EmployeeService">
         <property name="empDao" ref="empDao" />
</bean>
上述配置是使用了set的方式进行注入依赖。如果想不进行配置的依赖关系的话(智能绑定),可以按照如下的配置
<bean id="empDao" class="com.iflytek.emp.dao.EmployeeDao"></bean>
  <bean id="empService" class="com.iflytek.emp.service.EmployeeService" autowire="byName">
</bean>

byName配置,Spring容器可以按照name的方式进行智能绑定,或者通过byType配置按照类型智能的绑定

注意:也可以在全局beans节点进行统一的配置 default-autowire="byName" 将所有的Bean进行配置成智能绑定的规则。

这样做的好处可以减少一半的配置工作,即依赖关系的配置。但是对于Bean的配置还是需要继续配置的,不过已经少了很多配置了,这样也很不错了。

智能绑定:优点可以减少依赖关系,缺点从XML上无法看到Bean之间的依赖关系了。

Spring的零配置

Spring核心功能是实现Bean的管理和依赖注入。配置文件也是分为如下两个步骤:

  1)配置Bean

  2)配置Bean的依赖

前面学到的使用智能绑定的配置能够解决步骤2的配置依赖的部分;如果想彻底的实现取代XML的“零配置”方式,还需要解决配置Bean的这一部分。

Java受rails的启发,现在的框架都开始支持零配置方式或者正在走在零配置的路上。目前零配置有两种技术方案 

  1)“命名优于配置”的策略;

  2)使用注解进行标记。

PS:“命名优于配置”的方式对程序员的命名方式必须按照一定的规则进行编写,对于平时命名不规范的程序员来说在简直是天灾和人祸。

Spring进行管理Bean,首先要知道哪个Bean是将要被纳入到容器中的。Spring容器会主动的“搜索”。“搜索”的目标Bean的特征使用注解进行标记。这就是Spring的零配置的原理——Spring容器搜索指定包下的有特定注解标记的Java类。

三、相关注解

标记Spring Bean,Spring提供了如下的几个注解:

  1)@Component:用来标注任何一个普通的Java类

  2)@Controller:用来标注一个控制类(Struts的Action或者Springwebmvc的Controller)

  3)@Service:用来标注一个业务逻辑的Java类

  4)@Repository:标注一个DAO的Java类

@Component标注任何一个Java类,包含另外三个所标记的Java类,但是在未来的Spring版本中或者在JavaEE开发的项目中都是推荐使用特定含义的注解进行标注。即尽量考虑使用@Controller、@Service、@Repository

 四、代码实现

4.1目录结构

4.2Emp实体类

package com.emp.entity;

import java.util.jar.Attributes.Name;

import org.springframework.stereotype.Component;
//给Javabean命名方式,如果不使用@Component("Emp")命名,系统会以此类的类名命名,且首字母小写
@Component("Emp")
public class Emp {
	private String name;
	private int age;
	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;
	}
	
}

4.2EmpDao接口类

package com.emp.dao;

import com.emp.entity.Emp;

public interface EmpDao {
	public Emp showMessage();
}

4.3EmpDaoImpl实现类

package com.emp.dao.impl;

import javax.annotation.Resource;

import org.springframework.stereotype.Repository;

import com.emp.dao.EmpDao;
import com.emp.entity.Emp;
@Repository
public class EmpDaoImpl implements EmpDao {
	private Emp emp;
	
	@Resource(name="Emp")
	public void setEmp(Emp emp) {
		this.emp = emp;
	}

	@Override
	public Emp showMessage() {
		// TODO Auto-generated method stub
		emp.setAge(20);
		emp.setName("赵小航");
		return emp;
	}

}

 4.4EmpService业务类

package com.emp.service;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.emp.dao.impl.EmpDaoImpl;

@Service
public class EmpService {
	private EmpDaoImpl edi;
	@Resource(name="empDaoImpl")
	public void setEdi(EmpDaoImpl edi) {
		this.edi = edi;
	}
	public void print() {
		System.out.println(edi.showMessage().getAge()+edi.showMessage().getName());
	}
}

 4.5MainTest测试类

package com.emp.main;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.emp.service.EmpService;

public class MainTest {
	public static void main(String[] args) {
		ApplicationContext cxt = new ClassPathXmlApplicationContext("spring.xml");
		EmpService service = (EmpService) cxt.getBean("empService");
		service.print();
	}
}

 4.6spring.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-4.0.xsd 
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
" default-autowire="byName">
<!--查找bean的方式,总共分为三种1、通过名字2、通过类型3、通过构造函数 -->
	<!--开启注解扫描-->
	<context:component-scan base-package="com.emp.*" />
</beans>

4.7结果展示

 

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小生不财

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值