【问题标题】:Replacing Spring bean injection via XML with annotation injection用注解注入替换通过 XML 的 Spring bean 注入
【发布时间】:2015-02-19 04:13:36
【问题描述】:

我想通过注解声明和注入一个bean。之前是通过 XML 完成的,但是我需要申请一个 Spring Boot 项目。

这里是源xml

<oauth:resource-details-service id="rds">
    <oauth:resource
            id="oauth1"
            key="${key}"
            secret="${secret}"
            request-token-url="${token}"
            user-authorization-url="${user-auth}"
            access-token-url="${accesstokenurl}">
    </oauth:resource>
</oauth:resource-details-service>

bean后来是这样用的

<bean class="org.springframework.security.oauth.consumer.client.OAuthRestTemplate">
    <constructor-arg ref="oauth1"/>
</bean>

我发现的唯一方法是通过直接实例化

BaseProtectedResourceDetails resourceDetails = new BaseProtectedResourceDetails();
resourceDetails.set...
resourceDetails.set...
OAuthRestTemplate restTemplate = new OAuthRestTemplate(resourceDetails);

这样做的正确方法是什么?

【问题讨论】:

  • 你可以在你的配置java类中初始化BaseProtectedResourceDetails,然后为OAuthRestTemplate初始化bean,并在构造函数中传递BaseProtectedResourceDetails的初始化bean。

标签: java spring spring-boot


【解决方案1】:

您可以在主类中使用@Bean 注解,例如:

@SpringBootApplication
public class Application{

 @Bean
 public OAuthRestTemplate getAuth(){
   BaseProtectedResourceDetails resourceDetails = new BaseProtectedResourceDetails();
   resourceDetails.set...
   resourceDetails.set...

   return new OAuthRestTemplate(resourceDetails);
 }
}

在使用@Autowired 注入对象之后

@Autowired
private OAuthRestTemplate oAuthRestTemplate;

【讨论】:

  • 今晚我会试试这个,如果可行的话就接受这个。谢谢。
  • 如果 resourceDetails 需要在属性文件中定义配置(如密钥),使用 @Value 注释的字段可以工作,还是在创建 bean 时为空?
  • 你可以尝试像这样使用环境对象:@Resource Environment env;并获取如下属性: final String myPropertyValue = environment.getProperty("myProperty");
【解决方案2】:

我不确定您是否正在寻找这个解释。但是,如果我理解您的问题,那么以下信息可能会对您有所帮助。

对于示例配置类,您可以查看this 示例。

package com.tutorialspoint;
import org.springframework.context.annotation.*;

@Configuration
public class TextEditorConfig {

   @Bean 
   public TextEditor textEditor(){
      return new TextEditor( spellChecker() );
   }

   @Bean 
   public SpellChecker spellChecker(){
      return new SpellChecker( );
   }
}

而注册配置类,可以看this SO answer

@Service、@Component、@Repository、@Controller、@Autowired 相关示例请参见this

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-07
    • 2013-11-14
    相关资源
    最近更新 更多