【spring框架】spring的几个Annotation实现(下)

【spring框架】spring的几个Annotation实现(下)

继续上一篇http://blog.csdn.net/acmman/article/details/43889483的介绍

3.注解@Required

是初始化的时候就给注入,检查这个配置是否有问题。用来容错的。

4.@Resource(重要)

a)加入:j2ee/common-annotation.jar

@Resource是j2ee的标准。

b)默认按名称,名称找不到,按类型(比AutoWired更直观)

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:context="http://www.springframework.org/schema/context"
       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:annotation-config/>
  
  <bean id="u" class="cn.edu.hpu.dao.Impl.UserDaoImpl">
     <property name="daoId" value="1"></property>
  </bean>
	
  <bean id="userService" class="cn.edu.hpu.service.UserService">
  </bean>
  
</beans>

UserService.java:

package cn.edu.hpu.service;


import javax.annotation.Resource;


import cn.edu.hpu.dao.UserDao;
import cn.edu.hpu.model.User;


public class UserService {


	private UserDao userDao;
	
	public void init(){
		System.out.println("init");
	}
	
	public UserDao getUserDao() {
		return userDao;
	}
	@Resource
	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}


	public void add(User u){
		this.userDao.save(u);
	}
	
	public void destroy(){
		System.out.println("destroy");
	}
	
}

测试:

package cn.edu.hpu.service;
import org.junit.Test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;


import cn.edu.hpu.dao.UserDao;
import cn.edu.hpu.model.User;


public class UserServiceTest {
	
	@Test
	public void testAdd() throws Exception{
		ClassPathXmlApplicationContext ctx=new 


ClassPathXmlApplicationContext("beans.xml");
		
		UserService userService=(UserService)ctx.getBean("userService");
		System.out.println(userService.getUserDao());
		ctx.destroy();
	}
}

结果:

daoid=1

c)可以指定特定名称

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:context="http://www.springframework.org/schema/context"
       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:annotation-config/>
  
  <bean id="u" class="cn.edu.hpu.dao.Impl.UserDaoImpl">
     <property name="daoId" value="1"></property>
  </bean>
  <bean id="u2" class="cn.edu.hpu.dao.Impl.UserDaoImpl">
     <property name="daoId" value="2"></property>
  </bean>
	
  <bean id="userService" class="cn.edu.hpu.service.UserService">
  </bean>
  
</beans>

UserService.java中改一下这里

@Resource(name="u2")
	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}

测试:

package cn.edu.hpu.service;
import org.junit.Test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;


import cn.edu.hpu.dao.UserDao;
import cn.edu.hpu.model.User;


public class UserServiceTest {
	
	@Test
	public void testAdd() throws Exception{
		ClassPathXmlApplicationContext ctx=new 


ClassPathXmlApplicationContext("beans.xml");
		
		UserService userService=(UserService)ctx.getBean("userService");
		System.out.println(userService.getUserDao());
		ctx.destroy();
	}
}

结果:

daoid=2

d)推荐使用

原因是比比AutoWired更直观

e)不足:如果没有源码,就无法运用annotation,只能用xml.

5.@Component(spring自带)

如果不想在beans.xml里面写bean了,想一劳永逸,让spring去指定包下去寻找,那么就用

<context:component-scan base-package=”XXXX”>其中”XXXX”就是指定的包名。

实验:

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:context="http://www.springframework.org/schema/context"
       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:annotation-config/>
  <context:component-scan base-package="cn.edu.hpu"/>
  <bean id="userService" class="cn.edu.hpu.service.UserService">
  </bean>
  
</beans>

UserDaoImpl.java:

package cn.edu.hpu.dao.Impl;


import java.util.List;
import java.util.Map;
import java.util.Set;


import org.springframework.stereotype.Component;


import cn.edu.hpu.dao.UserDao;
import cn.edu.hpu.model.User;


@Component
public class UserDaoImpl implements UserDao{


	public void save(User u) {
	    System.out.println("add success!!");		
	}
}

测试:

package cn.edu.hpu.service;
import org.junit.Test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;


import cn.edu.hpu.dao.UserDao;
import cn.edu.hpu.model.User;


public class UserServiceTest {
	
	@Test
	public void testAdd() throws Exception{
		ClassPathXmlApplicationContext ctx=new 


ClassPathXmlApplicationContext("beans.xml");
		
		UserService userService=(UserService)ctx.getBean("userService");
		User u=new User();
		u.setUsername("u1");
		u.setPassword("p1");
		userService.add(u);
		ctx.destroy();
	}
}

结果:

add success!!

a)初始化的名字默认为类名字母小写

推荐写上名字

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:context="http://www.springframework.org/schema/context"
       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:annotation-config/>
  <context:component-scan base-package="cn.edu.hpu"/>
</beans>

UserService.java:

package cn.edu.hpu.service;


import javax.annotation.Resource;


import org.springframework.stereotype.Component;


import cn.edu.hpu.dao.UserDao;
import cn.edu.hpu.model.User;


@Component("userService")
public class UserService {


	private UserDao userDao;
	
	public void init(){
		System.out.println("init");
	}
	
	public UserDao getUserDao() {
		return userDao;
	}
	@Resource(name="u")
	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}


	public void add(User u){
		this.userDao.save(u);
	}
	
	public void destroy(){
		System.out.println("destroy");
	}
	
}

UserDaoImpl.java:

package cn.edu.hpu.dao.Impl;


import java.util.List;
import java.util.Map;
import java.util.Set;


import org.springframework.stereotype.Component;


import cn.edu.hpu.dao.UserDao;
import cn.edu.hpu.model.User;


@Component("u")
public class UserDaoImpl implements UserDao{


	public void save(User u) {
	    System.out.println("add success!!");		
	}
}

测试:

package cn.edu.hpu.service;
import org.junit.Test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;


import cn.edu.hpu.dao.UserDao;
import cn.edu.hpu.model.User;


public class UserServiceTest {
	
	@Test
	public void testAdd() throws Exception{
		ClassPathXmlApplicationContext ctx=new 


ClassPathXmlApplicationContext("beans.xml");
		
		UserService userService=(UserService)ctx.getBean("userService");
		User u=new User();
		u.setUsername("u1");
		u.setPassword("p1");
		userService.add(u);
		ctx.destroy();
	}
}

结果:

add success!!

b)可以指定初始化bean的名字

目前@Component、@Repository(数据仓库)、@Service、@Controller没有区别

有源码用Annotation方便,开发效率高,没源码用XML。

尊重开源精神,尊重劳动成果,转载请注明出处:http://blog.csdn.net/acmman/article/details/43889503

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

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

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

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

(0)


相关推荐

  • SSM整合redis

    SSM整合redis一、关于SSM整合Redis需要知道的一些小知识在学习Redis的时候,大家应该知道,JAVA操作redis通常使用的是Jedis,通过java代码来操作redis的数据存储读取等操作,用过的人应该知道,Jedis客户端已经足够简单和轻量级了,但是呢,在此同时,Spring也为Redis提供了支持,就是在Spring-data模块中的Spring-Data-Redis(SDR),它一部分是基于Jed

  • 【机器学习】数据归一化——MinMaxScaler理解

    【机器学习】数据归一化——MinMaxScaler理解文章目录前言公式实例前言前阵在查sklearn的归一化方法MinMaxScaler的时候,发现找到的文章解释的一塌糊涂,一般都是扔个公式加一堆代码就敷衍了事了,所以这次写一篇讲述MinMaxScaler核心功能的文章。公式会查MinMaxScaler的基本上都应该理解数据归一化,本质上是将数据点映射到了[0,1]区间(默认),但实际使用的的时候也不一定是到[0,1],你也可以指定参数feature_range,映射到其他区间,这个后面再讲。首先了解该计算公式:Xstd=X−X.min(axis

    2022年10月11日
  • 关于异步FIFO设计,这7点你必须要搞清楚「建议收藏」

    关于异步FIFO设计,这7点你必须要搞清楚「建议收藏」这篇文章可能帮助您:了解异步FIFO设计中的7个要点。

  • [大整数乘法] java代码实现

    [大整数乘法] java代码实现

  • ant design vue上传文件_antd vue 表单

    ant design vue上传文件_antd vue 表单antdvue文件上传实例说明该实例是后端进行文件上传至minio服务器这里仅仅是展示前端antdvue得代码限制文件类型配置查看这里<template><a-upload:headers=”headers”:action=”url”:fileList=”fileList”@change=”handleChang…

  • 计算机网络bs/cs区别_bs嵌入cs

    计算机网络bs/cs区别_bs嵌入csCS什么是CS?CS(Client/Server)指客户端、服务器架构模式。客户端需要安装专用的客户端软件。CS的优点、特点1.交互性强2.存取模式安全3.网络通信量低4.响应速度快5.利于处理大量数据●能充分发挥客户端PC的处理能力,很多工作可以在客户端处理后再提交给服务器,所以CS客户端响应速度快。●操作界面漂亮、形式多样,可以充分满足客户自身的个性化要求。●C/S结构的管理信息系统…

    2022年10月17日

发表回复

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

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