小编Fra*_*ana的帖子

依赖注入与工厂模式

引用依赖注入的大多数示例,我们也可以使用工厂模式解决.看起来在使用/设计时,依赖注入和工厂之间的差异是模糊的还是薄的.

一旦有人告诉我你如何使用它会有所作为!

我曾经使用StructureMap一个DI容器来解决问题,后来我重新设计它以使用一个简单的工厂并删除了对StructureMap的引用.

任何人都可以告诉我他们之间的区别是什么,在哪里使用什么,这里最好的做法是什么?

design-patterns dependency-injection factory-pattern

484
推荐指数
12
解决办法
16万
查看次数

检索JPA实体列表和元数据

我想知道是否有办法在JPA中获取特定持久单元的所有实体类及其元数据.

通过元数据,我不仅指字段,还指它们的列名,长度,精度,数据类型,以及表名和我可以获得的任何内容.我尝试使用元模型,但我认为仅仅针对JPQL查询.

我需要能够向用户显示某些PU的所有活动实体,并且我不想在某些数组或数据库中对它们进行硬编码,我希望API告诉我实体所具有的功能.而且,如果可能,请为每个实体获取托管实例.

我想我可以尝试使用反射来获取带有@Entity注释的所有类,但它不会很漂亮,并且更难知道哪个类属于特定的PU,所以如果api已经暴露了这个信息,那么它将是大.

我更喜欢符合JPA的解决方案,但如果不可能,Hibernate或EclipseLink特定的答案就可以做到.

谢谢!

java hibernate jpa eclipselink

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

将动态bean添加到spring Web上下文

我需要能够将新bean添加到spring web上下文(在任何范围内),以便在编译时可能会在类路径中定义这些类.

例如,我可以动态创建一些这样的类,然后为这个类注册一个单例或会话bean.

我读了一些关于BeanFactoryPostProcessor的内容,但不确定它是否适用于Web上下文,如果我理解正确它只能在实际加载bean实例之前工作,而不是之后,或者我错了?

我无法在AnnotationConfigWebApplicationContext中找到有关如何执行此操作的信息,至少在我的测试中,我创建的所有bean都没有注入到其他实例中,即使它们是我只看到注册Singleton的方法bean但不适用于其他范围:

ctx.getBeanFactory().registerSingleton("dummy", dummy);
Run Code Online (Sandbox Code Playgroud)

PD

我发现了这个问题:在Spring中动态创建bean但是当我尝试将任何bean,bean定义或bean定义构建器添加到Web上下文时,这样bean就不会被加载:

AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
ctx.setServletContext(servletContext);
ctx.refresh();
//
log.trace("Registering first test bean");
Test test = new Test();
test.setDummy("x1");
ctx.getBeanFactory().registerSingleton("myTestBean1", test);        

log.trace("Registering second test bean");
BeanDefinition testDef = new RootBeanDefinition(Test.class);        
testDef.setScope(BeanDefinition.SCOPE_SINGLETON);        
ctx.getBeanFactory().registerSingleton("myTestBean2", testDef);

Test dummy1 = (Test)ctx.getBean("myTestBean1");
Object dummy2 = ctx.getBean("myTestBean2");

log.trace("beans: 1: {}; 2: {}", dummy1, dummy2); //<--this works, but...
ctx.refresh();

ctx.register(MyConfig.class); //configuring other beans
Run Code Online (Sandbox Code Playgroud)

...当我从MyConfig.class中配置的另一个bean执行此操作或使用@Component注释时(它甚至可能是另一个动态组件):

@Autowire Test myTestBean1;
//Or this:
Object a = this.ctx.getBean("myTestBean1"); //Or myTestBean2
Run Code Online (Sandbox Code Playgroud)

它会抛出NoSuchBeanDefinitionException

请帮我!!我一直在四处寻找并没有找到任何有用的信息,或者我可能但是我无法在如此短的时间内测试我在网上找到的所有东西而且弹簧文档似乎只对正常情况和xml配置非常好,而不是对于我正在尝试做的这些疯狂的事情而不是编程配置.

java spring

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

从JPQL查询返回JPA实体的子集作为映射数组?

在JPQL中,可以使用构造函数表达式来请求实体的子集,例如

SELECT NEW example.EmployeeDetails(e.name, e.salary, e.department.name) FROM Employee e
Run Code Online (Sandbox Code Playgroud)

它返回EmployeeDetails类型的对象列表

或使用投影选择,如

SELECT e.name, e.salary FROM Employee e
Run Code Online (Sandbox Code Playgroud)

返回Object[] result结果[0]是e.name,结果[1]是e.salary

有没有办法让JPA返回包含例如实体的子集的地图是有一个JPQL查询,可以返回 List<Map<String,Object>> result这样result.get(0).get("e.name")的回报e.nameresult.get(0).get('e.salary')收益e.salary

如果JPQL无法做到,那么HQL能做到吗?

hibernate jpa jpql

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

JSF 2.0:如何在使用HttpServletRequest.login后重定向到受保护的页面

我正在尝试使用基于表单的身份验证的HttpServletRequest.login.

一切都好(容器告诉登录/密码是否良好),除了在用户输入登录后,我不知道如何将用户重定向到他要求的受保护页面(重新显示登录表单).怎么做?

在此先感谢您的帮助.

代码:

web.xml中:

<login-config>
    <auth-method>FORM</auth-method>
    <realm-name>security</realm-name>
    <form-login-config>
        <form-login-page>/faces/loginwithlogin.xhtml</form-login-page>
        <form-error-page>/faces/noaut.xhtml</form-error-page>
    </form-login-config>
</login-config>
Run Code Online (Sandbox Code Playgroud)

页面loginwithlogin.xhtml

<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:f="http://java.sun.com/jsf/core">
    <h:head>
        <title>Authentication</title>
    </h:head>
    <h:body>
        <h:form>
            Login :
            <h:inputText value="#{login.login}" required="true" />
            <p/>
            Mot de passe :
            <h:inputSecret value="#{login.password}" required="true" />
            <p/>
            <h:commandButton value="Connexion" action="#{login.submit}">
                 <f:ajax execute="@form" render="@form" />
            </h:commandButton>
            <h:messages />
        </h:form>
    </h:body>
</html>
Run Code Online (Sandbox Code Playgroud)

更新:没有Ajax它不起作用.

支持豆:

@Named
@SessionScoped
public class Login implements Serializable {
  private String login;
  private String password;
  // getters and setters 
  ...

  public void submit() {
    FacesContext context = …
Run Code Online (Sandbox Code Playgroud)

java authentication jsf-2

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