码迷,mamicode.com
首页 > 编程语言 > 详细

Spring-01 注解实现IOC

时间:2018-01-15 11:03:29      阅读:230      评论:0      收藏:0      [点我收藏+]

标签:ram   分享   默认   beans   .class   from   project   nap   info   

控制反转和依赖注入

  • Spring通过依赖注入实现控制反转。
  • JavaEE项目通过工厂模式实现控制反转。
  • Spring的依赖注入原理也是基于工厂模式。
  • Spring提供了使用xml、注解、java配置、groovy配置实现依赖注入。

 

测试环境说明

1.使用myeclipse创建maven项目,jdk基于1.7

技术分享图片

2.填写maven项目GAV(三坐标)

技术分享图片

3.项目结构

技术分享图片

4.pom.xml文件信息

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.etc</groupId>
	<artifactId>spring4demo01</artifactId>
	<version>1.0.0-SNAPSHOT</version>
	<properties>
		<java.version>1.7</java.version>
	</properties>
	<dependencies>
		<!-- https://mvnrepository.com/artifact/junit/junit -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
			<scope>test</scope>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>4.1.9.RELEASE</version>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>2.3.2</version>
				<configuration>
					<source>${java.version}</source>
					<target>${java.version}</target>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

 

常用注解

  • 声明bean的注解
注解 说明
@Component 声明组件注解,bean没有明确角色。
@Service 业务逻辑层声明bean组件使用(service层或者biz层)。
@Repository 数据访问层声明bean组件使用(dao层)。
@Controller MVC模型中,在控制层(C)声明bean组件层使用。

以上注解位于:org.springframework.stereotype

  • 注入bean的注解
注解 说明
@AutoWired 按照类型装配注入,可以不通过getter和setter访问器注入。
@Qualifier

通常和@AutoWired注解配合使用。

如果@AutoWired找到多个可以装配类型,

则可以通过@Qualifier注解指定bean名称注入。

用法:@Qualifier("entityDao")

@Resource

JSR-250提供的注解,位于javax.annotation包下。

注入时候默认按照名称注入,如果无法匹配名称,则转换为按照类型注入。

名称指属性名称或者setter访问器方法名。

@Inject 用法和@AutoWired类似。

 

示例代码

数据访问层代码

package com.etc.dao;

import org.springframework.stereotype.Repository;

@Repository //数据访问层注解
public class EntityDao {
	
	public String getData(){
		return "get data from database";
	}
}

  

业务逻辑层代码

package com.etc.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.etc.dao.EntityDao;


@Service //service层注解
public class EntityService {
	
	@Autowired //注入bean
	private EntityDao entityDao;
	
	public String getData(){
		return entityDao.getData();
	}

}

  

配置类代码

package com.etc.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration //声明DiConfig类为配置类
@ComponentScan("com.etc.service,com.etc.dao")  //扫描service和dao包所有使用注解声明的bean,并创建和注册为spring bean
public class DiConfig {

}

 

测试类

package com.etc.test;

import org.junit.Test;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import com.etc.config.DiConfig;
import com.etc.service.EntityService;

public class TestClass {

	/**测试使用注解实现IOC*/
	@Test
	public void test1() {
		AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(
				DiConfig.class); 
		EntityService es = context.getBean(EntityService.class);
		System.out.println(es.getData());
		context.close();
	}

}

 

测试结果

一月 15, 2018 9:22:54 上午 org.springframework.context.annotation.AnnotationConfigApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@442c8ab0: startup date [Mon Jan 15 09:22:54 CST 2018]; root of context hierarchy
get data from database
一月 15, 2018 9:22:54 上午 org.springframework.context.annotation.AnnotationConfigApplicationContext doClose
信息: Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@442c8ab0: startup date [Mon Jan 15 09:22:54 CST 2018]; root of context hierarchy

  

Spring-01 注解实现IOC

标签:ram   分享   默认   beans   .class   from   project   nap   info   

原文地址:https://www.cnblogs.com/rask/p/8286765.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!