转自:http://blog.csdn.net/shiyuezhong/article/details/7959888/
1.用到的依赖包
Pom.xml添加:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>3.0.0.RELEASE</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<type>jar</type>
<scope>test</scope>
</dependency>
注:junit从上回的3换到了4.10
2.配置注解的application.xml文件
<?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"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd">
<!-- <bean id="person" class="com.syz.test01.Person">
<property name="name" value="zhangsan"></property>
<property name="age" value="12"></property>
</bean>
<bean id="app" class="com.syz.test01.App">
<property name="person" ref="person"></property>
</bean> -->
<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>
</beans>
注释掉原来的,加入类(红色部分,不加也行)和要扫描的包(下面讲到)。
3.配置被用来注入的类
先上类
package com.syz.test01;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
@Service("app")
@Scope("singleton")
public class App{
@Autowired
@Qualifier("person")
public Person person;
public Person getPerson() {
return person;
}
@PostConstruct
public void init(){
System.out.println("app 在初始化!");
}
@PreDestroy
public void destory(){
System.out.println("app 被销毁!");
}
}
@Service("app")
要点1:用于注解类,表示该类会被spring扫描到
要点2:这几个用法功能一致
@Controller (控制层)
Indicates that an annotated class is a "Controller" (e.g. a web controller).
This annotation serves as a specialization of @Component, allowing for implementation classes to be autodetected through classpath scanning. It is typically used in combination with annotated handler methods based on the RequestMapping annotation.
@Repository (持久层)
Indicates that an annotated class is a "Repository" (or "DAO").
A class thus annotated is eligible for Spring DataAccessException translation. The annotated class is also clarified as to its role in the overall application architecture for the purpose of tools, aspects, etc.
As of Spring 2.5, this annotation also serves as a specialization of @Component, allowing for implementation classes to be autodetected through classpath scanning.
@Service (业务层)
Indicates that an annotated class is a "Service" (e.g. a business service facade).
This annotation serves as a specialization of @Component, allowing for implementation classes to be autodetected through classpath scanning.
@Component (组件)
这 3 个注释分别和持久层、业务层和控制层(Web 层)相对应。虽然目前这 3 个注释和 @Component 相比没有什么新意,但 Spring 将在以后的版本中为它们添加特殊的功能。所以,如果 Web 应用程序采用了经典的三层分层结构的话,最好在持久层、业务层和控制层分别采用 @Repository、@Service 和 @Controller 对分层中的类进行注释,而用 @Component 对那些比较中立的类进行注释。
要点3:scope
表示该bean的作用域,
@Scope("singleton")
"singleton" and "prototype"
默认单例模式
要点4:
@PostConstruct 定义该bean初始化前执行的函数
@PreDestroy 定义该bean销毁前执行的函数
该两个注解以及接下来的@Resource不是spring的, 是Java ee自带的。
要点5:注入
@Autowired
@Retention(value=RUNTIME)
@Target(value={CONSTRUCTOR,FIELD,METHOD})
public @interface Autowired
@Autowired是Spring 提供的,需导入
Package:org.springframework.beans.factory.annotation.Autowired;
只按照byType 注入。一个参数 required,Boolean 是否必须
@Resource
@Resource(name="12",type=App.class)(两个比较重要的参数)
@Resource默认按 byName 自动注入,是J2EE提供的, 需导入Package:
javax.annotation.Resource;
@Resource有两个中重要的属性:name和type ,而Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用 byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。
@Resource装配顺序
(1). 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常;
(2). 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常;
(3). 如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常;
(4). 如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配;
@Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入。
Qualifier
使用 @Qualifier 注释指定注入 Bean 的名称
一般使用方法
@Autowired
@Qualifier("person")
或者@Qualifier("person")
或者@Resource(name="app",type=App.class)
4、配置JUNIT测试环境
目录结构
在上次的基础上,创建src/test/resources源文件夹
applicationContext-test.xml:
<?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:jee="http://www.springframework.org/schema/jee"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"
default-lazy-init="true">
<context:component-scan base-package="com.syz.test01" />
</beans>
只需配置要扫描的包就行了
log4j.properties:
# Output pattern : date [thread] priority category - message
log4j.rootLogger=debug,stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
log4j.logger.org.springframework.beans.factory.annotation=debug,stdout
log4j.appender.F = org.apache.log4j.DailyRollingFileAppender
log4j.appender.F.file=d:\\login.log
log4j.appender.F.DatePattern='.'yyyy-MM-dd
log4j.appender.F.layout=org.apache.log4j.PatternLayout
log4j.appender.F.layout.ConversionPattern= %5r %-5p %c{2} - %m%n
日志输出的配置,看个人喜好
测试类:
package com.syz.test01;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
@ContextConfiguration(locations = { "/applicationContext-test.xml" })
public class AppTest extends AbstractJUnit4SpringContextTests{
@Autowired
@Qualifier("app")
public App app ;
public App getApp() {
return app;
}
public void setApp(App app) {
this.app = app;
}
@Test
public void testApp(){
System.out.println(app.getPerson().getName());
System.out.println(app.getPerson().getAge());
}
}
说明:给测试类注入了app,app里又注入了person,在该测试类中,就能拿到app中的person对象,并打印出来。
Person.java
package com.syz.test01;
import org.springframework.stereotype.Component;
@Component
public class Person {
public String name = "zhangsan";
public String age = "1";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
预计的效果是控制台能打印出person里的默认属性。
说明1:junit4.10不是所有版本的spring-test都能搭配的,如果运行报错,看下junit和spring-test的搭配问题
说明2:spring的注入注解方式
相关推荐
Spring Framework 5.2.x提供Maven版本,意味着开发者可以使用Maven的`pom.xml`文件来声明Spring框架和其他相关库的依赖,简化项目的构建过程。这包括了自动下载所需库、解决依赖冲突以及执行构建生命周期中的各种...
标题 "springmvc+mybatis+spring注解" 描述了一个集成框架,该框架结合了Spring MVC、MyBatis和Spring的注解特性,用于构建Web应用程序。这个框架使用Maven作为构建工具,使得项目的依赖管理和构建过程更加简洁高效...
本篇文章将深入探讨如何使用Maven作为构建工具,在Eclipse环境中搭建一个整合了Spring、Spring MVC和Hibernate的项目。 首先,让我们了解Maven。Maven是Apache开发的一款项目管理和综合工具,它通过一个项目对象...
本源码包“spring-framework-3.2.4-RELEASE”不仅包含了Spring的核心组件,还为习惯使用Maven构建项目的开发者提供了便利。尽管原版使用了Gradle进行构建,但通过增加`pom.xml`文件,开发者可以无缝切换到Maven环境...
在IT行业中,构建Web应用程序是一项常见的任务,而`Maven`、`Spring`和`Jetty`是开发者常使用的工具。这个"maven+spring+jetty+logback简单项目源码"提供了一个基础框架,方便新手快速入门并实践这些技术。 首先,`...
2. `src/main/resources`:资源文件目录,可能存放了配置文件,如Spring的bean配置、Hibernate的实体映射文件(hbm.xml或使用注解)。 3. `src/main/webapp`:Web应用目录,包含静态资源(如HTML、CSS、JavaScript)...
在这个"2018年11月22日博客资源"中,你将找到关于如何使用 Maven 来管理 Spring 入门程序的示例。下面我们将深入探讨这两个工具的使用和相互配合。 1. **Maven 的基本概念** - `pom.xml`:Maven 的核心配置文件,...
本文将详细介绍如何使用Maven搭建Spring MVC环境,以及在这个过程中涉及的关键知识点。 首先,我们需要安装Maven。Maven的安装通常包括下载最新版本的Maven,配置环境变量,并确保`mvn`命令在终端中可以正常使用。...
通过学习和实践这个项目,初学者可以了解到如何使用Maven管理项目,Spring进行业务逻辑处理,Spring MVC构建Web界面,以及MyBatis进行数据库操作。同时,也会了解如何在Eclipse中配置和运行项目,以及如何与MySQL...
同时,Mybatis的Mapper接口可以通过Spring的`@Mapper`注解进行扫描和自动代理,这样就可以在Service层直接注入并使用Mapper对象,无需关心具体的SQL执行细节。 此外,`xxpmp`项目中可能还包含了一些关键的业务逻辑...
在本项目中,我们采用了Spring Boot、MyBatis、FreeMarker和Maven这四个核心组件构建了一套完整的Web应用程序架构。下面将详细讲解这四个技术及其整合应用。 **Spring Boot** Spring Boot是Spring框架的一个扩展,...
在本文中,我们将深入探讨如何使用IntelliJ IDEA创建并运行一个Maven Spring Boot工程,同时也会提及在没有集成开发环境(IDE)的情况下如何进行操作。Spring Boot是Java开发领域中一个非常流行的框架,它简化了...
在不使用Maven的情况下,在Eclipse中创建Spring Boot工程,你需要手动管理依赖的jar包。以下是一些关于这些jar包及其在Spring Boot项目中的作用的关键知识点: 1. **jboss-logging-3.3.0.Final.jar**:这是一个日志...
总结来说,这个"Maven下的Spring MVC 【Hello World】案例"展示了如何使用Maven构建一个简单的Spring MVC Web应用。从设置项目结构,定义依赖,到编写控制器,处理请求,最后通过JSP显示结果,每一个步骤都是理解...
- **启用自动配置**:通过使用`@EnableAutoConfiguration`注解,可以让Spring Boot根据项目中引入的依赖自动配置Spring。 ```java @EnableAutoConfiguration public class SampleController { // ... } ``` ...
标题中的“springboot(web项目,非maven)”指的是一个基于Spring Boot框架构建的Web应用程序,但它不是使用Maven作为构建工具。Spring Boot简化了Java Web应用的开发过程,提供了快速构建可运行的应用程序的方式,而...
1.引入Spring全注解 2.抽取业务/持久层通用代码(UniversalService/UniversalDao),避免重复编写 比如有实体:tab1,tab2,tab3,现在要对其3张表CRUD(增删改查)操作: a.使用原始的方法要写业务/持久类,至少各3,计6...
本文将深入探讨如何在IntelliJ IDEA(简称IDEA)环境下,利用Maven来构建一个基于Spring、SpringMVC和Hibernate的项目,并分享具体的操作步骤和注意事项。 首先,Spring框架作为核心,提供了依赖注入(DI)和面向切...
- 实现业务逻辑:创建Service层,使用Spring的@Autowired注解注入必要的bean,如DAO,执行数据库操作。 - 创建Controller:定义处理用户请求的控制器,调用Service层方法,返回视图或者JSON响应。 整合后的系统具有...