标签: postconstruct

JSF - Bean注入麻烦

正如用户之前在另一个问题中建议的那样,我需要在另一个bean中注入一个bean.

所以,我做以下事情:

@ManagedBean
@RequestScoped
public class Articles {
    private String selectedMenu;

    @ManagedProperty(value="#{user}")
    private UserManager user;

    @PostConstruct
    public void init() {
        if(selectedMenu==null || selectedMenu.trim().isEmpty()) {
            this.selectedMenu="0";
        }
    }

    // now here i should access to user.methods

    // getter and setter
}
Run Code Online (Sandbox Code Playgroud)

实际上,我无法访问UserManager数据.我收到这些错误:

BROWSER malformedXML: INVALID_STATE_ERR: Dom Exception 11

服务器日志 30-nov-2010 15.36.58 javax.faces.component.UIViewRoot$ViewMap put AVVERTENZA: Setting non-serializable attribute value into ViewMap: (key: profileSelector, value class: model.ProfileSelector) 30-nov-2010 15.36.59 com.sun.faces.mgbean.BeanManager preProcessBean GRAVE: JSF will be unable to create managed bean articles when it …

java jsf facelets postconstruct jsf-2

2
推荐指数
1
解决办法
8902
查看次数

@Startup注释不起作用

我使用@Startup注释在EJB中的部署过程中设置入口点,但它不起作用.请参阅以下代码示例:

@Singleton
@Startup
public class SchedulerManager {

    private static Logger log = Logger.getLogger(SchedulerManager.class);

    @PostConstruct
    public void atStartup() {
       System.out.println("stutrup!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用JBoss5.1.0

    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-api</artifactId>
        <version>6.0</version>
        <type>jar</type>
        <scope>provided</scope>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

请给我建议我做错了什么.

谢谢!阿尔乔姆

java ejb startup postconstruct

2
推荐指数
1
解决办法
3442
查看次数

JSF注入托管属性,好模式?

我对JSF很新,并没有真正"习惯"不同的思维,所以我在努力(我假设)是基本的.

假设我有一个类User,它是一个会话bean.

假设我有10000个对象的控制器,比如Factory,它需要能够将它们中的一些设置为"锁定",在我们的例子中,它意味着"锁定"字段不再变为空,而是引用"LockedItem"宾语.

这是我无法工作的地方:LockedItem,当你实现它时,应该引用当前登录的用户.我该怎么做?

我尝试使用@managedproperty进行注入,但是在LockedItem.constructor中它是null(这是正常的我假设)然后我尝试了@PostConstruct方法,但是这个方法永远不会被调用(为什么?即使我把它变成了一个托管bean ...是只有在".xhtml"创建对象时调用的postconstruct方法?)或者我应该使用"java se"技巧,比如使用户静态?


代码澄清为什么没有调用@PostConstruct("Seat"之一):

.xhtml

<h:outputLabel id="user" value="Hello #{user.name}" />
<h:outputLabel id="car" value="you have #{car.brand}" />
Run Code Online (Sandbox Code Playgroud)

用户

package test;

import java.io.Serializable;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

@ManagedBean
@SessionScoped
public class User implements Serializable {
    private String name ;

    public User()
    {
        name = "toto"; 
        System.out.println("User constructor");
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }


}
Run Code Online (Sandbox Code Playgroud)

汽车

package test;

import java.io.Serializable;

import javax.faces.bean.ManagedBean;

@ManagedBean
public class Car implements Serializable …
Run Code Online (Sandbox Code Playgroud)

jsf design-patterns code-injection postconstruct managed-bean

2
推荐指数
1
解决办法
1万
查看次数

无状态Bean的范围

我得到了一个如下所示的无状态bean:

@Stateless
public class MyBean implements IMyBean {

    @Inject
    private SomeClass someClass;
    @EJB
    private MyRepository myRepository;
    @Production
    @Inject
    private SomeFacade someWorker;

    @PostConstruct
    private void init() {
       // some logic ...
    }

    // some more logic...
}
Run Code Online (Sandbox Code Playgroud)

IMyBean带有@Local注释。我正在运行JBoss服务器。我得到了一个使用MyBean的.bat文件。仅在第一次执行此bat文件时,才调用@PostConstruct。这是为什么?MyBean属于哪个范围?似乎至少是ApplicationScoped。我以为那是RequestScope ...

scope postconstruct cdi

2
推荐指数
1
解决办法
5586
查看次数

使用Spring @Lazy和@PostConstruct注释

我有以下课程:

@Repository
class A {

    public void method1() {
        ...
    }
}

@Component
class B implements C {

    @Autowired
    @Lazy
    private A a;

    public void method2() {
        a.method1();
    }
}

@Component
class D {

    @Autowired
    private List<C> c;

    @PostConstruct
    public void method3() {
        // iterate on list c and call method2()
    }
}
Run Code Online (Sandbox Code Playgroud)

让我们假设Spring将bean初始化如下:
1.创建第一个bean B. 当创建bean B时,a由于@Lazy注释,将不会初始化字段.
2.创建下一个bean D. 然后method3()将被标记为执行@PostConstruct,但Spring尚未触及bean A. 因此,当调用a.method1()时,Spring会创建bean A并将其注入字段中a还是会抛出NullPointerException

java spring annotations lazy-evaluation postconstruct

2
推荐指数
1
解决办法
4148
查看次数

未在 Spring Boot 中调用的 JPA 实体上的 @PostConstruct

我正在使用 Spring Boot 并且我在我的 JPA 实体中添加了 @PostConstrcut 注释,如图所示,但是当实体被实例化时,这个拦截器永远不会被调用。

@Entity
public class MyTableName implements java.io.Serializable {
   // all attributes
   @PostConstruct
   public void init(){
     // This code never called
     System.out.println("PostConstruct");
   }
}
Run Code Online (Sandbox Code Playgroud)

java spring jpa postconstruct spring-boot

2
推荐指数
1
解决办法
4882
查看次数

单元测试时如何跳过@PostConstruct

我有一个计划任务,每天晚上汇总数据。每当我启动应用程序时,任务就会运行,当我在应用程序上运行 jUnit 测试时,我想阻止它运行。

@Scheduled(cron = "0 0 0 1 * ?")
public void SalesDataAggregation() {
    //aggregation
}
Run Code Online (Sandbox Code Playgroud)

编辑

上面的方法也在这里被调用

@PostConstruct
public void init(){
    SalesDataAggregation();
}
Run Code Online (Sandbox Code Playgroud)

java spring junit4 postconstruct

2
推荐指数
1
解决办法
6417
查看次数

PostConstruct注释无效

我有一个xhtml页面,在其中我使用存储在辅助bean中的信息.但是我需要在xhtml使用之前在bean构造中做一些操作.该操作包括从数据库中检索数据.
然后我使用一个方法进行此操作,并将其命名为search@PostConstruct并对其进行注释.但是当我调用我的xhtml页面时,我得到以下异常:

type Exception report

message An error occurred performing resource injection on managed bean MemberSearchControler

description The server encountered an internal error that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: An error occurred performing resource injection on managed bean MemberSearchControler
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:659)
root cause

com.sun.faces.mgbean.ManagedBeanCreationException: An error occurred performing resource injection on managed bean MemberSearchControler
    com.sun.faces.mgbean.BeanBuilder.invokePostConstruct(BeanBuilder.java:227)
    com.sun.faces.mgbean.BeanBuilder.build(BeanBuilder.java:103)
    com.sun.faces.mgbean.BeanManager.createAndPush(BeanManager.java:409)
    com.sun.faces.mgbean.BeanManager.create(BeanManager.java:269)
    com.sun.faces.el.ManagedBeanELResolver.resolveBean(ManagedBeanELResolver.java:244)
    com.sun.faces.el.ManagedBeanELResolver.getValue(ManagedBeanELResolver.java:116)
    com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)
    com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203)
    org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:69)
    org.apache.el.parser.AstValue.getValue(AstValue.java:112)
    org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
    com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109)
    javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)
    javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182)
    javax.faces.component.UIData.getValue(UIData.java:732)
    javax.faces.component.UIData.getDataModel(UIData.java:1811)
    javax.faces.component.UIData.setRowIndexWithoutRowStatePreserved(UIData.java:484)
    javax.faces.component.UIData.setRowIndex(UIData.java:473)
    com.sun.faces.renderkit.html_basic.TableRenderer.encodeBegin(TableRenderer.java:82)
    javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:864)
    javax.faces.component.UIData.encodeBegin(UIData.java:1133)
    javax.faces.component.UIComponent.encodeAll(UIComponent.java:1894) …
Run Code Online (Sandbox Code Playgroud)

jsf postconstruct

1
推荐指数
1
解决办法
9439
查看次数

使用new关键字创建对象时如何调用PostConstruct方法

我有一个类Banana,其中有一个@PostConstruct我想在创建类对象后运行的方法。我正在使用这些调用创建此类的对象

Cat cat = new Cat();
Banana b = new Banana(cat);
Run Code Online (Sandbox Code Playgroud)

因此,从日志中我了解到创建对象@PostConstruct时不会调用此方法。Banana我认为我的实现方式不是正确的用法。有人可以指导我如何正确实现这一点,因为这是我使用 Spring Boot 在 Java 项目上的第一个任务。我需要在创建对象后运行该设置代码Banana,那么除了@PostConstruct

@Slf4j
public class Banana {
    public Banana(Cat cat) {
        this.cat = cat;
    }
    private Cat cat;

    @PostConstruct
    public void setup() {
        // some code
    }

    public void execute() {
        // some code
    }
}
Run Code Online (Sandbox Code Playgroud)

java postconstruct spring-boot

0
推荐指数
1
解决办法
2748
查看次数