【Spring】Spring的IOC的注解开发

一、创建项目,引入jar包:

创建一个名为spring的java工程,我们顺便拷贝个log4j.properties文件,在Spring4的开发中,除了引入基本的开发包以外,还需要引入aop的包。所以我们需要的jar包如下:
在这里插入图片描述

二、创建Spring的配置文件

在src目录下创建一个文件“applicationContext.xml”,并引入context的dtd约束,因为这是注解开发所必需的。除此之外,我们还需要在配置文件中配置组件扫描,用来扫描那些包下的类使用@Component注解:

<?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-4.2.xsd">

	<context:component-scan base-package="cn.jingpengchong.vo"/>
</beans>

三、创建Move接口和MoveWalk类

使用注解开发的方式将类交给Spring来管理并实例化,需要将其添加@Component注解,默认情况下是根据类所对应的Class类实例化对象来获取Bean的,我们可以将该注解的value属性值赋值,使得该Bean时可以根据value属性值来获取:

package cn.jingpengchong.vo;

import org.springframework.stereotype.Component;

@Component("move")
//该注解相当于配置了:<bean name="move" class="cn.jingpengchong.vo.MoveWalk"/>
public class MoveWalk implements Move {
	@Override
	public void move() {
		System.out.println("步行。。。");
	}
}

测试方法:

public static void main(String[] args) {
	ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
	Move move = (Move) context.getBean("move");
	move.move();
}

运行结果如下:
在这里插入图片描述

四、为类中的普通属性赋值:@Value()

如果要让spring在实例化类的时候为其中的普通属性赋值,我们可以在类中对应属性的set方法上添加@Value()注解,括号内可以写属性值,如果没有set方法的话,将该注解添加在属性上效果也是一样的。例如,改造上面的MoveWalk类:

package cn.jingpengchong.vo;

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

@Component("move")
public class MoveWalk implements Move {

	@Value("张三")
	private String name;
	@Override
	public void move() {
		System.out.println(name + "步行。。。");
	}
}

运行测试类效果如下:
在这里插入图片描述

五、类注解

注解@Component用于修饰一个类,将该类交给Spring来管理并实例化。该注解衍生了三个功能相同的注解,虽然功能相同,但是应用时机有不同的推荐:

  • @Controller:该注解推荐用在web层;
  • @Service:该注解推荐用在service层;
  • @Repository:该注解推荐用在dao层。

六、属性注解

@Value:该注解用于设置普通属性的值;
@Autowired:该注解用于设置对象类型的属性,但是它是按照类型来匹配IOC容器里的对象来赋值的。如果想要按照名称来赋值,则需要将该注解结合@Qualifier注解来使用,为@Qualifier注解的value属性赋值,Spring就会按照该属性值来匹配IOC容器中的对象;
@Resource:该注解可以达到@Qualifier和@Autowired联合使用的效果,按照名称实现属性注入。

七、其他注解

@PostConstruct:初始化方法注解,相当于bean标签的init-method属性
@PreDestroy:销毁方法注解,相当于bean标签的destroy-method属性
@Scope:作用范围注解,相当于bean标签的scope属性,取值相同

发布了128 篇原创文章 · 获赞 17 · 访问量 2721

猜你喜欢

转载自blog.csdn.net/qq_43705275/article/details/104484084