通过注解实现ServiceImpl业务

一、使用@Component装配Bean

1、 定义类:User

在类上面加@Component注解,在属性上面加@Value值

package com.wbg.springxmlbean.entity;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component; @Component(value = "user")
public class User {
@Value("2")
private int id;
@Value("韦邦杠")
private String name;
@Value("18")
private int age;
private Role role; @Override
public String toString() {
return "User{" +
"id=" + id +
", role=" + role +
", name='" + name + '\'' +
", age=" + age +
'}';
} public Role getRole() {
return role;
} public void setRole(Role role) {
this.role = role;
} public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} }

2、使用@ComponentScan注解进行扫描包的路径

创建一个类,类上面加@CompontScan注解

测试:

 ApplicationContext context=new AnnotationConfigApplicationContext(PojoConfig.class);
User user=context.getBean(User.class);
System.out.println(user);

3、创建UserService接口

public interface UserService {
User getUser();
void setUser(User user);
}

4、创建实现类UserServiceImpl,在该类上面使用@Component注解

package com.wbg.springxmlbean.service.impl;

import com.wbg.springxmlbean.entity.User;
import com.wbg.springxmlbean.service.UserService;
import org.springframework.stereotype.Component; /**
* 这里的@Component 表名它是一个Spring所需要的 Bean
* 而且也实现了对于的UserService接口所定义的方法getUser、setUser
*/
@Component
public class UserServiceImpl implements UserService { private User user;
@Override
public User getUser() {
return user;
}
@Override
public void setUser(User user){
System.out.println("进入了UserServiceImpl.setUser");
System.out.println(user);
}
}

5、配置@ComponentScan制定包扫描

创建一个ApplicationConfig类,该类上面使用@ComponentScan注解

package com.wbg.springxmlbean.service.impl;

import com.wbg.springxmlbean.entity.User;
import org.springframework.context.annotation.ComponentScan; /**
* basePackageClasses直接扫描指定类
*/
@ComponentScan(basePackageClasses = {User.class,UserServiceImpl.class})
/**
* basePackages可读性好,但不建议使用,因为修改包名没有提示
*/
//@ComponentScan(basePackages = {"com.wbg.springxmlbean.entity","com.wbg.springxmlbean.service"}) public class ApplicationConfig {
}

测试:

 ApplicationContext context=new AnnotationConfigApplicationContext(ApplicationConfig.class);
User user=context.getBean(User.class);
UserService userService=context.getBean(UserService.class);
userService.setUser(user)

二、自动装配-@Autowired

eneity的Role类:

package com.wbg.springxmlbean.entity;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component; @Component
public class Role {
@Value("1")
private int id;
@Value("roleName_1")
private String roleName;
@Value("note_1")
private String note; @Override
public String toString() {
return "Role{" +
"id=" + id +
", roleName='" + roleName + '\'' +
", note='" + note + '\'' +
'}';
} public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getRoleName() {
return roleName;
} public void setRoleName(String roleName) {
this.roleName = roleName;
} public String getNote() {
return note;
} public void setNote(String note) {
this.note = note;
}
}

service创建接口:RoleService

package com.wbg.springxmlbean.service;

public interface RoleService {
void printRoleInfo();
}

impl实现类:RoleServiceImpl

@Component
public class RoleServiceImpl implements RoleService { @Autowired
private Role role;
@Override
public void printRoleInfo() {
System.out.println(role);
}
}

创建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"
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.3.xsd">
<!--指定要扫描的包,如果有多个可以用逗号隔开-->
<context:component-scan base-package="com.wbg.springxmlbean.service,com.wbg.springxmlbean.entity"/>
</beans>

测试:

 ApplicationContext context=new ClassPathXmlApplicationContext("Role12.xml");
RoleService userService=context.getBean(RoleService.class);
userService.printRoleInfo();

当有注解的时候

当没有的时候

三、注解@Primary

上面类:RoleServiceImpl实现了RoleService接口

再创建一个类RoleServiceImpl2进行实现RoleService接口

则RoleService接口就有两个实现类,但Spring ioc不知道采用哪个注入,然后就会出错

@Component
public class RoleServiceImpl2 implements RoleService { @Autowired
private Role role; @Override
public void printRoleInfo() {
System.out.println("进入了RoleServiceImpl22");
System.out.println(role);
}
}

在启动的时候报错

org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'com.wbg.springxmlbean.service.RoleService' available: expected single matching bean but found 2: roleServiceImpl,roleServiceImpl2

通过@Primary注解告诉Sring ioc

测试:

1、RoleServiceImpl2

去掉RoleServiceImpl2上面的@primary注解

测试RoleServiceImpl

四、注解@Qualifier

把上面的@Primary注解去掉,然后在Controller进行使用

现在接口AdminService有两个实现类

AdminServiceImpl

AdminServiceImpl2

然后在Controller进行实现

五、使用@Bean装配Bean

@Bean的配置项中包含4个配置

name:是一个字符中数组,允许多个

autowire:标识是否是一个引用Bean对象,默认值:Autowire.NO

initMethd:自定义初始化方法

destroyMethod:自定义销毁方法

代码:

package com.wbg.springxmlbean.spring;

import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import javax.sql.DataSource;
import java.beans.PropertyVetoException;
@Configuration
public class ConfigDataSource {
@Bean(name = "dataSource")
public DataSource getDataSource() throws PropertyVetoException {
ComboPooledDataSource dataSource=new ComboPooledDataSource();
dataSource.setDriverClass("org.mariadb.jdbc.Driver");
dataSource.setJdbcUrl("jdbc:mariadb://localhost:3306/wbg_logistics");
dataSource.setUser("root");
dataSource.setPassword("123456");
dataSource.setMaxPoolSize(30);
return dataSource;
}
}

实现:

接口:

public interface RoleDataSourceService {
Role getRole(int id);
}

实现接口

package com.wbg.springxmlbean.service.impl;

import com.wbg.springxmlbean.entity.Role;
import com.wbg.springxmlbean.service.RoleDataSourceService;
import com.wbg.springxmlbean.spring.ConfigDataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.beans.PropertyVetoException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; @Component
public class RoleDataSourceServiceImpl implements RoleDataSourceService { @Autowired
ConfigDataSource dataSource=null; @Override
public Role getRole(int id) {
Connection con=null;
ResultSet rs=null;
PreparedStatement ps=null;
Role role=null;
try {
con=dataSource.getDataSource().getConnection();
ps=con.prepareStatement("select * from role where id = ?");
ps.setInt(1,id);
rs=ps.executeQuery();
while (rs.next()){
role=new Role();
role.setId(rs.getInt(1));
role.setNote(rs.getString(2));
role.setNote(rs.getString(3));
}
} catch (PropertyVetoException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return role;
} }

这里Role12.xml需要扫描:

测试:

 ApplicationContext context=new ClassPathXmlApplicationContext("Role12.xml");
RoleDataSourceService roleDataSourceService=context.getBean(RoleDataSourceService.class);
System.out.println(roleDataSourceService.getRole(1));

六、装配的混合使用

创建一个配置类:

@ComponentScan(basePackages = "com.wbg.springxmlbean.service")
@ImportResource({"classpath:spring-dataSource.xml"})
public class ApplicationConfig {
}

创建xml文件:

spring-dataSource.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
">
<!--创建数据源-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="org.mariadb.jdbc.Driver" />
<property name="jdbcUrl" value="jdbc:mariadb://localhost:3306/wbg_logistics" />
<property name="user" value="root" />
<property name="password" value="123456" /> <property name="maxPoolSize" value="30" />
<property name="minPoolSize" value="10" />
<property name="autoCommitOnClose" value="false" />
<property name="checkoutTimeout" value="10000" />
<property name="acquireRetryAttempts" value="2" />
</bean> </beans>

创建接口:RoleDataSourceService2

创建实现类:

使用注解@Autowired

package com.wbg.springxmlbean.service;

import com.wbg.springxmlbean.entity.Role;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; @Service
public class RoleDataSourceService2Impl implements RoleDataSourceService2 { @Autowired
DataSource dataSource;
@Override
public Role getRole(int id) {
Connection con=null;
ResultSet rs=null;
PreparedStatement ps=null;
Role role=null;
try {
con= dataSource.getConnection();
ps=con.prepareStatement("select * from role where id = ?");
ps.setInt(1,id);
rs=ps.executeQuery();
while (rs.next()){
role=new Role();
role.setId(rs.getInt(1));
role.setRoleName(rs.getString(2));
role.setNote(rs.getString(3));
}
} catch (SQLException e) {
e.printStackTrace();
}
return role;
}
}

测试:

ApplicationContext context=new AnnotationConfigApplicationContext(ApplicationConfig.class);
RoleDataSourceService2 roleDataSourceService=context.getBean(RoleDataSourceService2.class);
System.out.println(roleDataSourceService.getRole(2));

demo:https://github.com/weibanggang/springAnnotation.git

Spring通过注解装配Bean的更多相关文章

  1. spring 通过注解装配Bean

    使用注解的方式可以减少XML的配置,注解功能更为强大,它既能实现XML的功能,也提供了自动装配的功能,采用了自动装配后,程序员所需要做的决断就少了,更加有利于对程序的开发,这就是“约定优于配置”的开发 ...

  2. (转)java之Spring(IOC)注解装配Bean详解

    java之Spring(IOC)注解装配Bean详解   在这里我们要详细说明一下利用Annotation-注解来装配Bean. 因为如果你学会了注解,你就再也不愿意去手动配置xml文件了,下面就看看 ...

  3. Spring学习(六)bean装配详解之 【通过注解装配 Bean】【基础配置方式】

    通过注解装配 Bean 1.前言 优势 1.可以减少 XML 的配置,当配置项多的时候,XML配置过多会导致项目臃肿难以维护 2.功能更加强大,既能实现 XML 的功能,也提供了自动装配的功能,采用了 ...

  4. Spring总结 1.装配bean

    本随笔内容要点如下: 依赖注入 Spring装配bean的方式 条件化装配 一.依赖注入 我理解的依赖注入是这样的:所谓的依赖,就是对象所依赖的其他对象.Spring提供了一个bean容器,它负责创建 ...

  5. Spring 之自动化装配 bean 尝试

    [Spring之自动化装配bean尝试] 1.添加dependencies如下所示(不是每一个都用得到 <dependencies> <dependency> <grou ...

  6. spring中自动装配bean

    首先用@Component注解类: package soundsystem: import org.springframework.stereotype.Component; @Component p ...

  7. spring的自动装配Bean与自动检测Bean

    spring可以通过编写XML来配置Bean,也可以通过使用spring的注解来装配Bean. 1.自动装配与自动检测: 自动装配:让spring自动识别如何装配bean的依赖关系,减少对<pr ...

  8. SpringBoot(14)—注解装配Bean

    SpringBoot(14)-注解装配Bean SpringBoot装配Bean方式主要有两种 通过Java配置文件@Bean的方式定义Bean. 通过注解扫描的方式@Component/@Compo ...

  9. java之Spring(IOC)注解装配Bean详解

    在这里我们要详细说明一下利用Annotation-注解来装配Bean. 因为如果你学会了注解,你就再也不愿意去手动配置xml文件了,下面就看看Annotation的魅力所在吧. 先来看看之前的bean ...

随机推荐

  1. Oracle PL/SQL Developer 上传下载Excel

    接到需求,Oracle数据库对Excel数据进行上传和下载,百度后没有很全的方案,整理搜到的资料,以备不时之需. 一.下载Oracle数据到Excel中. 下载数据到Excel在MSSql中很简单,直 ...

  2. windows下es安装教程

    es安装 1.es下载地址:https://www.elastic.co/downloads/past-releases 2.使用es需要先安装好jdk,注意es版本和jdk版本的兼容问题,es6.1 ...

  3. node.js之内存机制特性

    Node.JS的V8引擎具有垃圾回收机制与内存限制的特性,V8的内存限制:64位系统约为1.4GB.32位系统约为0.7GB:V8采用基于分代式垃圾回收机制,堆内存结构分为新生代和老生代,新生代达到一 ...

  4. TCP客户端 服务端详细代码

    本文章转自http://www.myexception.cn/program/1912019.html TCP网络编程中connect().listen()和accept()三者之间的关系 基于 TC ...

  5. Create a soft keyboard

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  6. SPOJ:COT2 Count on a tree II

    题意 给定一个n个节点的树,每个节点表示一个整数,问u到v的路径上有多少个不同的整数. n=40000,m=100000 Sol 树上莫队模板题 # include <bits/stdc++.h ...

  7. 原生ajax与封装的ajax使用方法

    当我们不会写后端接口来测试ajax时,我们可以使用node环境创建一个本地服务器. 1.创建一个本地服务器可参考http://www.cnblogs.com/heyujun-/p/6793900.ht ...

  8. windows 打印刻录 代码规范及问题

    1.获取CString字节数 int z_Len = WideCharToMultiByte(CP_ACP, 0, z_FileXml.GetBuffer(), z_FileXml.GetLength ...

  9. idea 使用 git打成jar包到 nexus

    1.使用idea生成jar包参考:http://blog.csdn.net/eastgrand/article/details/11945309 2.进入到 自己的工程目录(含有pom.xml的目录) ...

  10. angularJS articles and resources

    http://antjanus.com/blog/web-development-tutorials/front-end-development/comprehensive-beginner-guid ...