在spring中使用注解配置前需要先在配置文件指定需要扫描的包。

通过注解的方式依赖注入,可以不用创建set方法,也不用在xml文件中申明注入关系。

实例结构如下:

整个流程是:

先创建好数据库的表对应的持久类“User”。再定义好数据层和业务逻辑层的接口。

在测试类中,获取bean容器中具体的业务逻辑实现类实例(UserServiceImpl),往里面传一个user参数,之后UserServiceImpl对象将参数经过处理再传给数据层实现类(UserDaoImpl),这个UserDaoImpl是框架注入到UserServiceImpl中的。

beans.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:util="http://www.springframework.org/schema/util"
xmlns:p="http://www.springframework.org/schema/p" 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/util
http://www.springframework.org/schema/util/spring-util-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!--开启注解功能,指定可扫描的包-->
<context:component-scan base-package="com.springdemo" />
<context:component-scan base-package="java" /> <!--注册一个UserDaoImpl对象,实例名为“u”-->
<bean id="userDao" class="com.springdemo.dao.impl.UserDaoImpl"/> <!--注册一个UserServiceImpl对象,实例名为“userService”-->
<bean id="userService" class="com.springdemo.service.impl.UserServiceImpl"/>
</beans>

User.java:

/**
* Created by CLY on 2016/12/26.
*/
//持久化类,这个类对应的是数据库里的user表,该表有name和age这两个字段。
public class User {
private String name;
private int age; public void setName(String name) {
this.name = name;
} public void setAge(int age) {
this.age = age;
} public int getAge() {
return age;
} public String getName() {
return name;
}
}

UserDao.java:

import com.springdemo.entity.User;

/**
* Created by CLY on 2016/12/26.
*/
public interface UserDao {
//创建了个demo接口方法,供实体类实现。这个方法本来的作用是:“获取user对象,将用户信息存入数据库”
public void save(User user);
}

UserDaoImpl.java:

import com.springdemo.dao.UserDao;
import com.springdemo.entity.User; /**
* Created by CLY on 2016/12/26.
*/
public class UserDaoImpl implements UserDao { //实现UerDao接口的save方法
public void save(User user) {
//本来是要将作为参数传入的“user持久化类”的对象存入数据库的,但此处主要是突显依赖注入,所以就忽略具体的操作了。
System.out.print("用户名:"+user.getName()+" 年龄:"+user.getAge());
}
}

UserService.java:

import com.springdemo.entity.User;

/**
* Created by CLY on 2016/12/26.
*/
public interface UserService { //mvc框架中的“控制器”会将User对象传给service层的这个方法。(因为是测试,就忽略控制器了)
// 该方法负责对user对象进行一些业务逻辑的处理,之后传给dao层。
public void add(User user);
}

UserServiceImpl.java:

import com.springdemo.dao.UserDao;
import com.springdemo.entity.User;
import com.springdemo.service.UserService; import javax.annotation.Resource; /**
* Created by CLY on 2016/12/26.
*/
public class UserServiceImpl implements UserService{ @Resource(name = "userDao")//使用注解配置,将id为“userDao”的bean注入到“userDaoImpl”里面
private UserDao userDaoImpl;//定义dao层的“接口” public void add(User user) {
/*
* 将控制器传过来的user对象传给dao层。
* 此处体现的是面向接口编程。好处就是:当该接口的具体实现类改变时,并不需要修改此service中的代码,因为service操作的是接口的方法*/
userDaoImpl.save(user);
}
}

Test.java:

import com.springdemo.entity.User;
import com.springdemo.service.impl.UserServiceImpl;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; /**
* Created by CLY on 2016/12/26.
*/
public class Test {
//测试UserServiceTest的add方法
public static void main(String args[]){
//创建spring容器,将beans的配置文件装载进容器。
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
//通过容器的getBean()方法,获取具体的bean实例(参数是bean的id名)。
UserServiceImpl service = (UserServiceImpl)ctx.getBean("userService"); User u =new User();
u.setName("小明");
u.setAge(18); service.add(u);
}
}

spring注解配置实例的更多相关文章

  1. 关于Spring注解配置的步骤

    今天分享一下 关于Spring注解配置的流程 1 导包:如下图所示 2 书写User和Car类  代码如下 package cn.lijun.bean; public class Car { priv ...

  2. Spring注解配置和xml配置优缺点比较

    Spring注解配置和xml配置优缺点比较 编辑 ​ 在昨天发布的文章<spring boot基于注解方式配置datasource>一文中凯哥简单的对xml配置和注解配置进行了比较.然后朋 ...

  3. 【Spring实战】Spring注解配置工作原理源码解析

    一.背景知识 在[Spring实战]Spring容器初始化完成后执行初始化数据方法一文中说要分析其实现原理,于是就从源码中寻找答案,看源码容易跑偏,因此应当有个主线,或者带着问题.目标去看,这样才能最 ...

  4. 【转】【Spring实战】Spring注解配置工作原理源码解析

    一.背景知识 在[Spring实战]Spring容器初始化完成后执行初始化数据方法一文中说要分析其实现原理,于是就从源码中寻找答案,看源码容易跑偏,因此应当有个主线,或者带着问题.目标去看,这样才能最 ...

  5. spring注解配置启动过程

    最近看起spring源码,突然想知道没有web.xml的配置,spring是怎么通过一个继承于AbstractAnnotationConfigDispatcherServletInitializer的 ...

  6. Spring MVC配置实例

    1.下载Jar文件,添加到项目 lib文件夹中. 使用eclipse新建 Web 项目.下载导入相关的 jar 和 Tomcat.我的java版本是JDK1.8 对应的 Tomcat 版本是 8.0. ...

  7. Spring注解配置Aop

    之前学习了SpringAop的基本原理.http://www.cnblogs.com/expiator/p/7977975.html 现在尝试使用注解来配置SpringAop. Aop,面向切面编程. ...

  8. 5.spring:注解配置 Bean

    在classpath中扫描组件 组键扫描:能够从classpath下自动扫描,侦测和实例化具有特定注解的组件 特定的组件包括: ->@Componment:基于注解,标识一个受Spring管理的 ...

  9. Spring 注解配置Bean

    一.使用注解配置Bean 1.注解 在类定义.方法定义.成员变量定义前使用.其简化<bean>标签,功能同<bean>标签.格式为: @注解标记名. 2.组件扫描 Spring ...

随机推荐

  1. c#反射机制

    一:反射的定义 审查元数据并收集关于它的类型信息的能力.元数据(编译以后的最基本数据单元)就是一大堆的表,当编译程序集或者模块时,编译器会创建一个类定义表,一个字段定义表,和一个方法定义表等. Sys ...

  2. android面试宝典

    一.listview的优化: 首先要知道getview实际就是个for循环. 我们重写的getview方法中本身有一个convertview,因为只需要保留能够显示的最大个数的view即可,所以: 第 ...

  3. 常用的HTML代码

    一.文字1.标题文字 <h#>..........</h#> #=1~6:h1为最大字,h6为最小字 2.字体变化 <font>..........</fon ...

  4. JS中,!=, !== 和 !的区别和使用场景

    var num = 1; var str = '1'; var test = 1;   test == num   //true 相同类型 相同值 test === num  //true 相同类型 ...

  5. mysql 慢查询的小结

    MySQL优化的第一步应该做的就是排查问题,找出瓶颈,而通常情况下的瓶颈和问题都需要通过观察MySQL的运行情况来进行分析,而对于大多数的程序员来说,最容易发现并解决的问题就是MySQL的慢查询或者没 ...

  6. pkcs1与pkcs8格式RSA私钥互相转换

    转自:http://blog.csdn.net/duan19056/article/details/52104966 1.PKCS1私钥生成 openssl genrsa -out private.k ...

  7. win7(x64)下安装cocos2d并编译安卓项目

    好吧,不为啥,就是如题. win7 x64 脑袋内存比较小,说不定明儿就忘了,今天记录一下. 没有什么经验,所有步骤基本都是百度出来的,这里边操作边记录,为了保护原创作者,这里我都附上我查找的链接. ...

  8. JS去重的几种方法

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. openfl使用64位的ndk时,编译报错的问题!

    当使用64位的ndk时,如果使用openfl test android运行android测试,应该会出现 arm-linux-androideabi-g++:找不到这个命令的错误. 原因是,haxel ...

  10. Swift #function 和 _cmd (Objective-C)

    NSStringFromSelector(_cmd); // Objective-C print(__FUNCTION__) // Swift 2 print(#function) // Swift ...