Spring注解、XML、整合

Spring的IOC的注解开发(重点)

Spring的IOC的注解开发的入门

创建一个web项目,引入jar包
在这里插入图片描述

  • 在src下创建applicationContext.xml
    • 引入约束,使用注解开发引入context约束
    • 约束:spring-framework-4.2.4.RELEASE\docs\spring-framework-reference\html\xsd-configuration.html

applicationContext.xml文件

	<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"> <!-- bean definitions 	

here -->

	</beans>
  • 创建接口和实现类
  • 首先开启Spring的组件扫描
<!-- Spring的IOC 的注解的入门========================= -->
	<!-- 使用IOC的注解开发,配置组件扫面(哪个包下的类要使用IOC注解) -->
	<context:component-scan base-package="com.java.spring.demo1"/>
  • 在类上添加注解
/*
 * 用户DAO的实现类
 */
@Component(value="userDao")//相当于<bean id="userDao" class="com.java.spring.demo1.UserDaoImpl">
public class UserDaoImpl implements UserDao{

	@Override
	public void save() {
		System.out.println("UserDaoImpl被执行了。。。");
	}

}
  • 编写测试类
//Spring的IOC注解方式
	public void demo2() {
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext

("applicationContext.xml");
		UserDao dao = (UserDao)applicationContext.getBean("userDao");
		dao.save();
	}
注解方式设置属性的值
  • 注解方式:使用注解方式,可以没有set方法
    • 属性如果有set方法,需要将属性注入的注解添加到set方法
    • 属性如果没有set方法,需要将属性注入的注解添加到属性上
@Component(value="userDao")//相当于<bean id="userDao" 	class="com.java.spring.demo1.UserDaoImpl">
	public class UserDaoImpl implements UserDao{
	
	@Value("张三")
	private String name;

	@Override
	public void save() {
		System.out.println("UserDaoImpl被执行了。。。"+name);
	}

	}

这样就可以直接打印这个name,如果是set方法还需要在测试类里面设置这个name的值

Spring的IOC的注解的详解

@Component:组件
  • 修饰一个类,将这个类交给Spring管理
  • 这个注解有三个衍生注解(功能类似)
    • @Controller:web层
    • @Service:service层
    • Repository:dao层
属性注入的注解
  • 普通属性:
    • @value:设置普通属性的值
  • 对象类型属性
    • @Autowired:设置对象类型的属性的值,但是按照类型完成属性注入
      • 我们习惯是按照名称完成属性注入:必须让@Autowired注解和@Qualifier一起使用完成按照名称属性注入
    • @Resource:完成对象类型的属性注入,按照名称完成属性注入
Bean的其他的注解
  • Bean作用范围的注解
    • @Scope:作用范围
      • singleton:默认单例
      • prototype:多例
      • request
      • session
      • globalsession

IOC的XML和注解开发比较

XML和注解比较
  • 适用场景:
    • XML:可以适用任何场景
      • 结构清晰,维护方便
    • 注解:有些地方用不了,这个类不是自己提供的
      • 开发方便

XML和注解整合开发

一、XML管理Bean,注解完成属性注入
<!-- Spring的IOC 的注解的入门========================= -->
	<!-- 使用IOC的注解开发,配置组件扫面(哪个包下的类要使用IOC注解) -->
	<context:component-scan base-package="com.java.spring"/>

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

新建三个类,分别为ProductDao、OrderDao、ProductService

package com.java.spring.demo2;

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

package com.java.spring.demo2;

public class OrderDao {
	public void save() {
		System.out.println("OrderDao被执行了。。。");
	}
}
package com.java.spring.demo2;

import javax.annotation.Resource;

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的save方法被调用了。。。");
		productDao.save();
		orderDao.save();
	}
	
}

测试类

package com.java.spring.demo2;

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

public class Test {
	
	public void demo1() {
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
		ProductService service = (ProductService)applicationContext.getBean("productService");
		service.save();
	}
	
	public static void main(String[] args) {
		Test test = new Test();
		test.demo1();
	}
	
}
二、XML与注解整合

applicationContext.xml文件

<!-- 在没有扫描的情况下使用属性注入注解 -->
	<context:annotation-config/>
		
	<bean id="productService" class="com.java.spring.demo2.ProductService">
		<!-- <property name="productDao" ref="productDao" />
		<property name="orderDao" ref="orderDao" /> -->
	</bean>
	
	<bean id="productDao" class="com.java.spring.demo2.ProductDao"></bean>
	<bean id="orderDao" class="com.java.spring.demo2.OrderDao"></bean>

主要修改productDao类就行(要用到注解就不需要set方法了)

package com.java.spring.demo2;

import javax.annotation.Resource;

public class ProductService {
	
	@Resource(name="productDao")
	private ProductDao productDao;
	@Resource(name="orderDao")
	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的save方法被调用了。。。");
		productDao.save();
		orderDao.save();
	}
	
}

猜你喜欢

转载自blog.csdn.net/Woo_home/article/details/89640234