Spring IOC的注解开发

1. Spring的IOC的注解开发

1.1.创建web项目,引入jar包

在Spring4的版本中,除了基本的四个核心包➕两个日志文件包➕一个AOP的包(多引入这个)
在这里插入图片描述

1.2 引入Spring的配置文件
  • 1.在src下创建applicationContext.xml
  • 2.引入约束
<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"> 
<!--Spring的IOC的注解的入门  -->
<!--使用IOC注解开发,配置扫描  就是配置哪些包需要配置注解-->
<context:component-scan base-package="spring.demo1">
</context:component-scan>
</beans>
  • 3.在类上添加注解
package spring.demo1;

//用户DAO的实现类
import org.springframework.stereotype.Component;

//下面相当于<bean id="userDao" class="spring.demo1"/>
@Component("userDao")
public class UserDaoImpl implements UserDao {
	@Override
	public void save() {
		System.out.println("Dao中的save方法执行了。。");
	}
}
  • 4.编写测试类
//spring的IOC注解开发
@Test
public void demo2() {
	ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
	UserDao userDao=(UserDao) applicationContext.getBean("userDao");
	userDao.save();
}
1.3注解方式设置属性的值
  • 使用注解方式,可以没有set方法的
  • 属性如果有set方法,需要将属性注入的注解添加到set方法上。
  • 属性如果没有set方法,需要将属性注入的注解添加在属性上
package spring.demo1;

import org.springframework.beans.factory.annotation.Value;
//用户DAO的实现类
import org.springframework.stereotype.Component;

//下面相当于<bean id="userDao" class="spring.demo1"/>
@Component("userDao")
public class UserDaoImpl implements UserDao {

	@Value("lijia")
	private String name;
	
	/*
	 * public void setName(String name) { 
	 * this.name = name; 
	 * }
	 */
	@Override
	public void save() {
		System.out.println("Dao中的save方法执行了。。" + name);
	}
	}

1.4Spring的IOC的注解的详解
1.4.1 @Component :组件
  • 修饰一个类,将这个类交给Spring管理
  • 这个注解有三个衍生注解(功能类似)
    • @Controller : web层
    • @Service : service层
    • @Repository :dao层
1.4.2属性注入的注解
  • 普通属性
    • @Value : 设置普通属性的值
  • 对象类型属性
    • @Autowired : 设置对象类型的属性的值,但是按照类型完成属性注入
    • 习惯是按照名称完成属性注入,必须让@Autowired注解和@Qualifier一起使用完成属性注入。
    • @Resource :完成对象类型的属性的注入,按照名称晚上属性注入
package spring.demo1;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Repository;

//下面相当于<bean id="userDao" class="spring.demo1"/>
//@Component("userDao")
@Repository("userDao11")
public class UserDaoImpl implements UserDao {

	@Value("lijia")
	private String name;

	/*
	 * public void setName(String name) { 
	 * this.name = name; 
	 * }
	 */
	@Override
	public void save() {
		System.out.println("Dao中的save方法执行了。。" + name);
	}
}

package spring.demo1;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

@Service("userService")
public class UserServiceImpl implements UserService {
/*	@Autowired // 注入DAO
	  @Qualifier(value="userDao11")
*/
	@Resource(name="userDao11")
	private UserDao userDao;

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

	}

}

@Test
public void demo3() {
	ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
	UserService userService=(UserService) applicationContext.getBean("userService");
	userService.save();
}

1.5 Bean 的生命周期的注解(不重要)
  • 两个注解:

    • @PostConstruct : 初始化方法
    • @PreDestroy : 销毁方法
  • 1.配置文件

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

<!--Spring的IOC的注解的入门  -->
<!--使用IOC注解开发,配置扫描  就是配置哪些包需要配置注解-->
<context:component-scan base-package="spring.demo1,spring demo2"></context:component-scan>
<!--可以扫描多个包,也可以扫描子包 base-packeage="spring"即可 -->
</beans>
  • 2.编写类
package spring.demo2;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

import org.springframework.stereotype.Service;


//<bean id="" class="" init-method="init" destroy-method="destroy">
@Service("customerService")
public class CustomerService {
	
	@PostConstruct //相当于init-method
	public void init() {
		System.out.println("CustomerService的init方法执行了。。。");
	}

	public void save() {
		System.out.println("CustomerService的save方法执行了。。。");
	}
  @PreDestroy  //相当于destroy-method
	public void destroy() {
		System.out.println("CustomerService的destroy方法执行了。。。");
	}
}

    1. 编写测试类
package spring.demo2;

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

public class Testdemo2 {
	@Test
	public void demo1() {
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
		CustomerService customerService = (CustomerService) applicationContext.getBean("customerService");
		customerService.save();
		
		// 要想执行destroy方法,必须使用子类对象和关闭applicationContext方法
		/*
		 * ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); CustomerService
		 * customerService = (CustomerService)applicationContext.getBean("customerService"); 
		 * applicationContext.close();
		 */
	}
}

1.6 IOC和XML注解比较
  • XML:适用于任何场景

  • 注解: 有些地方不适用,比如这个类不是自己提供的

  • 纯XML配置的方式
    编写order类

package spring.demo3;

public class OrderDao {
	public void save() {
		System.out.println("OrderDao执行了");
	}
}

编写product类

package spring.demo3;

public class ProductDao {
	public void save() {
		System.out.println("ProductDao执行了");
	}
}

编写ProductService类

package spring.demo3;

public class ProductService {

	private ProductDao productDao;
	private OrderDao orderDao;

	public void setProductDao(ProductDao productDao) {
		this.productDao = productDao;
	}

	public void setOrderDao(OrderDao orderDao) {
		this.orderDao = orderDao;
	}

	public void save() {
		System.out.println("ProductService执行了");
		productDao.save();
		orderDao.save();
	}
}

配置XML文件

<bean id="productService" class="spring.demo3.ProductService">
		<property name="productDao" ref="productDao"></property>
		<property name="orderDao" ref="orderDao"></property>
	</bean>
	<bean id="productDao" class="spring.demo3.ProductDao"></bean>
	<bean id="orderDao" class="spring.demo3.OrderDao"></bean>

编写测试类

package spring.demo3;

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

public class Testdemo3 {
	@Test
	public void demo1() {
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
		ProductService productService = (ProductService) applicationContext.getBean("productService");
		productService.save();
	}
}

IOC 和XML整合开发
<!--在没有扫描的情况下,可以使用属性注入注解@Resource @Value @Autowired @Qualifier -->
	<context:annotation-config></context:annotation-config>
	

		@Resource(name="productDao")
		private ProductDao productDao;
		@Resource(name="orderDao")
		private OrderDao orderDao;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值