spring @Repository 和@Service,@Controller使用方法

spring @Repository 和@Service,@Controller使用方法

Web 应用程序采用了经典的三层分层结构的话,最好在持久层、业务层和控制层分别采用 @Repository、@Service 和 @Controller 对分层中的类进行注释;

实际使用中

实例一:@Repository

spring @Repository 和@Service,@Controller使用方法

上图中的application3.xml是配置文件,test2是测试类。其他的不用管;

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:="http://www.springframework.org/schema/beans"
	   xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
       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-2.5.xsd">
            
		 <context:component-scan base-package="com.introduce.Dao"></context:component-scan>
</beans>

配置文件是启动spring容器时扫描com.introduce.Dao所有的注解。


test2测试类

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.introduce.Dao.UserDao;

public class Test2 {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext3.xml");
		UserDao userDao=ac.getBean(UserDao.class);
		userDao.getUser2("haha");
	}
}

UserDao接口和它的实现类UserDaoImpl

package com.introduce.Dao;


import com.introduce.Model.User2;
public interface UserDao{
	User2 getUser2();

	User2 getUser2(String name);

}
package com.introduce.Dao;

import org.apache.ibatis.session.SqlSession;


import org.apache.ibatis.session.SqlSessionFactory;

import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;
import com.introduce.Model.User2;
@Service
public class UserDaoImpl implements UserDao{
//	private SqlSessionFactory sqlSessionFactory; 
//	public UserDaoImpl(SqlSessionFactory sqlSessionFactory){
//		this.sqlSessionFactory=sqlSessionFactory;
//	}
	@Override
	public User2 getUser2() {
		
		return null;
	}

	@Override
	public User2 getUser2(String name) {
		// TODO Auto-generated method stub
//		SqlSession sqlSession=sqlSessionFactory.openSession();
//		User2 user2=sqlSession.selectOne("com.introduce.Modle.User2.getUser2",name);
		User2 user2=new User2();
		user2.setAge(22);
		System.out.println(name);
		return  user2;
	}
}


这样在启动后就会打印出user实现类方法的内容。

注:至于注解中@Service()的括号中要不要加字符串,如@Service(“userDao”).这里是加不加,加什么样的字符都无所谓,因为只有一个实现类,当有多个实现类是,也可以不用填,在下面的实例二中,会通过@Qualifier()来指定特定的实现了。如果填了,要保证两个字符串不相等即可。一般项目中安全起见会以实现类名为准,避免重复。

实例二:@Repository 与service一起使用,并当有多个实现类时,如何指定某个实现类。

测试类 main方法:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.introduce.Dao.UserDao;
import com.introduce.Dao.UserServiceImpl;
import com.introduce.Dao.UserService;

public class Test2 {
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext3.xml");
		UserService userService=ac.getBean(UserService.class);
		userService.ff();
//		UserDao userDao=ac.getBean(UserDao.class);
//		userDao.getUser2("haha");
		
	}
}

main方法中找到容器中的userService.class类。

进入到service接口和实现类

package com.introduce.Dao;

public interface UserService {
void ff();
}
package com.introduce.Dao;

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

import com.introduce.Dao.UserDao;
@Service
public class UserServiceImpl implements UserService1{
	@Autowired
	@Qualifier("userDaoImpl2")
	UserDao userDao;
	
	public void ff(){
		userDao.getUser2("oo");
	}

}

在service的实现类中有两点,一是加@Service;二是使用@Qualifier()指定某个实现类。@Qualifier()括号中的字符串某人是实现类的类名首字母小写,当然也可以自己定义,如在实现类的其中一个service(“s1”),另一个service(“s2”);即可。下面的代码是没加的。可以手动加,然后再@Qualifier(‘s2’)就会执行userDaoImpl类的方法。


dao层的三个类,一个接口,两个实现类

package com.introduce.Dao;


import com.introduce.Model.User2;
public interface UserDao{
	User2 getUser2();

	User2 getUser2(String name);

}

package com.introduce.Dao;

import org.apache.ibatis.session.SqlSession;


import org.apache.ibatis.session.SqlSessionFactory;

import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;
import com.introduce.Model.User2;
@Service
public class UserDaoImpl implements UserDao{
//	private SqlSessionFactory sqlSessionFactory; 
//	public UserDaoImpl(SqlSessionFactory sqlSessionFactory){
//		this.sqlSessionFactory=sqlSessionFactory;
//	}
	@Override
	public User2 getUser2() {
		
		return null;
	}

	@Override
	public User2 getUser2(String name) {
		// TODO Auto-generated method stub
//		SqlSession sqlSession=sqlSessionFactory.openSession();
//		User2 user2=sqlSession.selectOne("com.introduce.Modle.User2.getUser2",name);
		User2 user2=new User2();
		user2.setAge(22);
		System.out.println(name);
		return  user2;
	}
}

package com.introduce.Dao;

import org.springframework.stereotype.Service;

import com.introduce.Model.User2;
@Service
public class UserDaoImpl2 implements UserDao{
	@Override
	public User2 getUser2() {
		
		return null;
	}

	@Override
	public User2 getUser2(String name) {
		// TODO Auto-generated method stub
//		SqlSession sqlSession=sqlSessionFactory.openSession();
//		User2 user2=sqlSession.selectOne("com.introduce.Modle.User2.getUser2",name);
		User2 user2=new User2();
		user2.setAge(22);
		System.out.println(name);
		return  user2;
	}
}


细心的朋友可以看到我的userDaoImpl和userDaoImpl2两个实现类都是使用的@Service。可是程序也能正常执行。如果把@Service换成@Repository程序

也是可以正常执行的。所以二者并没有功能上的差别,只是为了配合spingmvc 三层架构区分开的别名。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/106266.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • ActiveMQ详细入门教程系列(一)

    ActiveMQ详细入门教程系列(一)

    2020年11月20日
  • DatabaseMetaData的简单使用

    DatabaseMetaData的简单使用在看大佬写的一个导出数据库建标脚本的接口的时候,发现频频用到DataBaseMetaData这个类,之前也没有用过这个类下的API,记录一下心得用法。DatabaseMetaData是java.sql包中的接口,利用它可以获取我们连接到的数据库的结构、存储等很多信息;先上个API文档:这英文看的是心力憔悴,直接来看这个接口…

  • 比和比例的联系和区别

    比和比例的联系和区别比和比例一直是学数学容易弄混的几大问题之一,其实它们之间的问题完全可以用一句话概括:比,等同于算式中等号左边的式子,是式子的一种(如:a:b);比例,由至少两个称为比的式子由等号连接而成,且这两个比的比值是相同(如:a:b=c:d)。所以,比和比例的联系就可以说成是:比是比例的一部分;而比例是由至少两个比值相等的比组合而成的.比和比例的区别:区别区别1:意义、项数、各部

  • win10 VMware 虚拟机 实现桥接模式 上网

    win10 VMware 虚拟机 实现桥接模式 上网前言:  可能很多朋友想用VMware在自己的windows系统上体验下其它操作系统或者运行某些只能在Linux上的软件。但是可能自己买阿里云或者腾讯云感觉划不来。下面我来简单的来告诉大家,运用VMware的桥接模式,可以让大家像拥有另外一台不同操作系统的电脑一样在局域网中。同样可以来上网,可以和局域网中的其他机器一样通信,甚至可以暴露ip与端口到公网中,这样其他机器或者网页等也能访问它。环境…

  • java程序出现问题:java.sql.SQLException: ORA-01008: 并非所有变量都已绑定

    java程序出现问题:java.sql.SQLException: ORA-01008: 并非所有变量都已绑定异常提示是并非所有变量都已绑定,实际上从sql语句上看是没有问题,直接使用在数据库也是有效的,那么他为什么会报ORA-01008:并非所有变量都已绑定,这个这个问题一般出现在sql语句,因为程序写的sql语句可能出现所查询没有的字段,而此处sql语句没有错误,出问题的地方是preparedStatemnt.executeUpdate(sql)这条语句,这是使用PreparedStateme…

  • 浅谈贝叶斯和MCMC

    浅谈贝叶斯和MCMC 转自:http://www.xuyankun.cn/2017/05/13/bayes/ Abstract:最近课业内的任务不是很多,又邻近暑假了,就在网上搜了一些有关于机器学习和深度学习的课程进行学习。网上的资料非常繁多,很难甄别,我也是货比三家进行学习。这是这个系列的第一个笔记,是关于贝叶斯和MCMC一些数学原理的讲解和代码的实现,希望能够深入浅出,叙述的容易让人理解。…(阅…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号