前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >spring @Repository 和@Service,@Controller使用方法

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

作者头像
全栈程序员站长
发布2022-06-30 13:28:57
2220
发布2022-06-30 13:28:57
举报
文章被收录于专栏:全栈程序员必看

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

实际使用中

实例一:@Repository

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

代码语言:javascript
复制
<?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测试类

代码语言:javascript
复制
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

代码语言:javascript
复制
package com.introduce.Dao;


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

	User2 getUser2(String name);

}
代码语言:javascript
复制
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方法:

代码语言:javascript
复制
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接口和实现类

代码语言:javascript
复制
package com.introduce.Dao;

public interface UserService {
void ff();
}
代码语言:javascript
复制
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层的三个类,一个接口,两个实现类

代码语言:javascript
复制
package com.introduce.Dao;


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

	User2 getUser2(String name);

}
代码语言:javascript
复制
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;
	}
}
代码语言:javascript
复制
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 三层架构区分开的别名。

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021年7月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档