Spring JSR 250注释

时间:2020-02-23 14:35:53  来源:igfitidea点击:

Spring支持JSR 250注释,例如@PostConstruct,@Predestroy和@Resource Annotations.

@resource:

Spring还支持使用JSR-250的注射 @Resource在字段或者bean属性设置器方法上注释。
这是Java EE 5和Java 6中的常用模式,Spring支持Spring 管理的对象。

@Resource将名称作为属性,默认情况下,Spring 将解释为要注入的bean名称。
换句话说,它遵循的名称语义。
如果我们未指定名称属性,则它将将属性名称解释为要注入的bean名称,然后它将在XML配置文件中搜索。

例子:

1.Country.java:

这是简单的Pojo类,其中有一些属性,所以国家有资本类的名称和对象。

在package org.igi.javapostssforlarearning中创建country.java .Copy内容到Country.java之后。

package org.igi.javapostsforlearning;
import org.springframework.beans.factory.annotation.Autowired;
public class Country {
 
    String countryName;
   
    @Resource(name="capitalA") 
    Capital capital;
    public String getCountryName() {
        return countryName;
    }
    public void setCountryName(String countryName) {
        this.countryName = countryName;
    }
    public Capital getCapital() {
        return capital;
    }
}

2.Capital.java.

这也是一个名为"bueinkname"的一个属性的简单pojo类。

在package org.igi.javapostsforlearning时创建Capital.java .java.above country类包含此类的对象。
内容进入capical.java之后

package org.igi.javapostsforlearning;
 
public class Capital {
 
    String capitalName;
 
    public String getCapitalName() {
        return capitalName;
    }
 
    public void setCapitalName(String capitalName) {
        this.capitalName = capitalName;
    }
}

3.QualifierAnnotationInspringMain.java.

此类包含main function.CreateQualileAnnotationInsPringMain.java在package org.igi.javapostsfor learearning .copy以下内容到prositileannotationinspringmain.java之后

package org.igi.javapostsforlearning;
 
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
 
public class QualifierAnnotationInSpringMain{
 
    public static void main(String[] args) {
        ApplicationContext appContext = new ClassPathXmlApplicationContext("ApplicationContext.xml");
 
        Country countryObj = (Country) appContext.getBean("CountryBean");
        String countryName=countryObj.getCountryName();
        Capital capital=countryObj.getCapital();
        String capitalName=capital.getCapitalName();
        System.out.println(capitalName+" is capital of "+countryName);
       
    }
}

4.ApplicationContext.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-3.0.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-3.0.xsd">
 <context:annotation-config
 <bean id="CountryBean" class="org.igi.javapostsforlearning.Country">
  <property name="countryName" value="Netherlands" 
 </bean>
 <bean id="capitalA" class="org.igi.javapostsforlearning.Capital">
  <property name="capitalNamehttp://www.blogger.com/blogger.g?blogID=1114068605611316469#editor/target=post;postID=2213204035101507334" value="Amsterdam" 
 </bean>
 <bean id="capitalB" class="org.igi.javapostsforlearning.Capital">
  <property name="capitalName" value="Mumbai" 
 </bean>
</beans>

如我们所能注意到,我们有两个相同类型的bean.in country.java我们使用了@resource(name-"capitala")它意味着我们希望在XML配置中使用Bean ID ="小写字母"的国家的AutoWire Capital属性文件。

5.运行:

当我们将运行上面的应用程序时,我们将按照输出作为输出。

Amsterdam is capital of Netherlands

@postContruct和@predestroy:

这些注释是用于定义初始化和破坏回调函数的替代方法。

我们在Spring生命周期回调中使用了所有其他方法。

例子:

在Eclipse IDE中配置Spring,请参阅Hello World示例

1.Country.java:

这是一个简单的pojo类,其中一些属性所以这里的国家有名字。

在package org.igi.javapostssforlarearning中创建country.java .Copy内容到Country.java之后。

package org.igi.javapostsforlearning;
 
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
 
public class Country {
 
 String countryName ;
 
 public String getCountryName() {
  return countryName;
 }
 
 
 public void setCountryName(String countryName) {
  this.countryName = countryName;
 }
 
 @PostConstruct
 public void init()
 {
  System.out.println("In init block of country");
 }
 
 @PreDestroy 
 public void destroy()
 {
  System.out.println("In destroy block of country");
 }
}

2.lifetimecallbacksmain.java.

此类包含Main Function.Create LifetimeCallBacksmain.java在package org.igi.javapostsforlearning。
内容到LifetimeCallBacksmain.java之后的内容.copy

package org.igi.javapostsforlearning;
 
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
 
public class LifetimeCallbacksMain{
 
 public static void main(String[] args) {
 
  AbstractApplicationContext appContext = new ClassPathXmlApplicationContext("ApplicationContext.xml");
  Country countryObj = (Country) appContext.getBean("country");
  System.out.println("Country Name: "+countryObj.getCountryName());
  appContext.registerShutdownHook();
 }
}

其中我们需要注册在抽象应用程序上声明的关机钩注册器HUTDOWNHOOK()方法。
这将确保优雅的关机并调用相关的Destroy方法。

3.ApplicationContext.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:aop="http://www.springframework.org/schema/aop"
 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
 
 <bean id="country" class="org.igi.javapostsforlearning.Country" init-method="init" destroy-method="destroy">
 <property name="countryName" value="Netherlands"
 </bean>
  
</beans>

4.运行

当我们将运行上面的应用程序时,我们将按照输出作为输出。

In init block of country
Country Name: Netherlands
In destroy block of country