Spring的IOC的注解开发

1 IOC注解开发入门

1.1 创建web项目,引入jar包

在Spring3的版本,只要引入基本包(https://blog.csdn.net/W2612888/article/details/85217984)即可,但是在Spring4的版本中,除了引入基本的开发包之外,还需要引入aop的包

1.2 引入Spring的配置文件

创建配置文件并引入context约束注解开发需要),具体的约束在xsd-configuration.xml中找

    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">

 1.3 开启Spring的组件扫描

	<!-- 使用IOC注解开发,配置组件扫描(配置哪些包下的类使用IOC的注解) -->
		<context:component-scan base-package="com.itykd.dao.impl"/>

1.4 创建接口、实现类以及注解

  • 接口
package com.itykd.dao;

public interface UserDao {
	void save();
}
  • 实现类和注解

@Component("userDao") 相当于<bean id="userDao" class="com.itykd.dao.userDaoImpl" />

package com.itykd.dao.impl;

import org.springframework.stereotype.Component;

import com.itykd.dao.UserDao;
@Component("userDao")
public class UserDaoImpl implements UserDao {

	@Override
	public void save() {
		System.out.println("UserDaoImpl的save方法执行了.....");
		
	}

}

1.5 编写测试方法

	public void demo() {
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
		UserDao userDao=(UserDao)applicationContext.getBean("userDao");
		userDao.save();	
	}

2 Spring IOC注解的详解

2.1 @Component:组件

@Component用来修饰一个类,并将这个类交给Spring管理

这个注解有三个衍生注解:

  • @Controller  :修饰web层的类
  • @Service     :修饰service层的类
  • @Repository:修饰dao层的类

2.2 属性注入的注解

2.2.1 普通属性

基本数据类型的注入用@Value,这种方式是按照名称的属性注入的形式(如下图所示的xml配置就是按照名称注入的形式)

2.2.2 对象类型属性

对象类型的属性的值用@Autowired,这个默认采用的是按照类型完成属性注入的形式(如下面两个图所示)

UserService的实现类依赖UserDao,尽管他们的名称不一样,但是依然能够注入,这就是按照类型完成的属性注入

尽管按照类型也能完成属性注入, 但是我们习惯是按照名称完成属性注入,这个时候必须让@Autowired和@Qualifier一起使用(强制按照名称,如下图所示,如果下图两个名字不相同,则无法注入属性

当然也可以用@Resource代替@Autowired@Qualifier共同使用,即可以按照名称完成对象类型的属性的注入

2.3 bean的其他的注解 

2.3.1 生命周期的注解

  • @PostConstruct:初始化方法
  • @preDestroy:销毁方法
    @PostConstruct
	public void init() {
    	System.out.println("userService初始化了.....");
    }
    @PreDestroy
    public void destroy() {
    	System.out.println("userService销毁了.....");
    }

2.3.2 作用范围的注解

@scope:作用范围的注解 比如:@Scope("prototype")

  • singleton:单例,默认
  • prototype:多例
  • request
  • session
  • globalsession

3 IOC的XML和注解方式的比较

3.1 XML和注解的比较

  • XML:可以适用任何场景
  • 注解:有些地方用不了,这个类不是自己提供的(不是自己写的,不可能在别人的源码上加注解,比如SSH的整合中,不能在相应的源代码中进行注解,这时候就需要利用XML方式)。
  • XML方式结构清晰,维护方便,而注解的优点就是开发方便

3.2 XML和注解的整合开发

  • 由XML文件管理bean,注解完成属性注入,这样结构清晰,也节省了代码

3.2.1 整合开发的示例

  • 在applicationContext.xml开启注解属性,将上述Spring的组件扫描标签注释。
	<!-- 开启注解属性 -->
	<context:annotation-config />
  • 在applicationContext.xml中配置bean
<?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">
	<!-- 使用IOC注解开发,配置组件扫描(配置哪些包下的类使用IOC的注解) -->
	<!-- <context:component-scan base-package="com.itykd"/> -->
	<!-- 开启注解属性 -->
	<context:annotation-config />
	<bean id="userService" class="com.itykd.service.impl.UserServiceImpl"/>
	<bean id="userDao" class="com.itykd.dao.impl.UserDaoImpl" />
	<bean id="customerDao" class="com.itykd.dao.impl.CustomerDaoImpl"/>
</beans>
  •  为类中的属性添加注解

import javax.annotation.Resource;

import com.itykd.dao.CustomerDao;
import com.itykd.dao.UserDao;
import com.itykd.service.UserService;
public class UserServiceImpl implements UserService{
    
	@Resource(name="userDao")
	private UserDao userDao;
	@Resource(name="customerDao")
	private CustomerDao customerDao;

	@Override
	public void save() {
		System.out.println("UserService的save方法执行了....");
		userDao.save();		
		customerDao.save();
	}
		
}
  • 测试代码
	public void demo() {
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
		UserService userService = (UserService)applicationContext.getBean("userService");
		userService.save();	
	}

猜你喜欢

转载自blog.csdn.net/W2612888/article/details/85223332