GVKun编程网logo

基于Spring注释的DI与xml配置?(spring基于注解的配置)

6

本文将分享基于Spring注释的DI与xml配置?的详细内容,并且还将对spring基于注解的配置进行详尽解释,此外,我们还将为大家带来关于cors跨域请求问题关于spring-springmvc-m

本文将分享基于Spring注释的DI与xml配置?的详细内容,并且还将对spring基于注解的配置进行详尽解释,此外,我们还将为大家带来关于cors跨域请求问题 关于spring -springmvc -mybatis .基于xml配置方式、java spring注释创建对象的xml配置、java – Junit – 通过注释加载Spring XML配置、java – 基于Spring MVC注释的多模块项目配置的相关知识,希望对你有所帮助。

本文目录一览:

基于Spring注释的DI与xml配置?(spring基于注解的配置)

基于Spring注释的DI与xml配置?(spring基于注解的配置)

在代码中使用spring注释来定义spring依赖关系。当前,我们正在使用context.xml定义我们的依赖项。你会为我提供这两种方法的线索,以及哪种方法最好使用?

编辑:我知道这似乎是对更一般的问题的重复问题,但是我对仅依赖注入的批注与配置的影响很感兴趣,我相信与一般性问题相比,答案和态度会有所不同。

答案1

小编典典

在阅读了此处的一些相关文章并在团队中进行了进一步讨论之后,我们得出以下结论。我希望这对这里的其他人有用。

关于XML配置(我们一直使用到现在),我们决定将其保留为库定义的依赖项(无论是由我们还是由第三方开发)。
顾名思义,库提供了特定的功能,可以在各种情况下使用,而不必涉及DI。因此,在我们自己开发的库项目中使用注释会创建DI框架(在本例中为Spring)对库的依赖,从而使该库在非DI上下文中无法使用。在我们的团队(通常是恕我直言)中,拥有额外的依赖关系不是一个好习惯。

当我们组装一个应用程序时,应用程序上下文将定义必要的依赖关系。当应用程序成为组合所有引用的组件的核心单元时,这将简化依赖关系跟踪,通常这确实是所有连接工作的地方。

在为许多组件提供模拟实现而无需重新编译将使用它们的应用程序模块时,XML对我们也有好处。当在本地或生产环境中运行测试时,这为我们提供了灵活性。

关于注释,我们决定在注入的组件不变的情况下使用它们会受益匪浅-例如,整个应用程序中仅会使用某个组件的特定实现。

注释对于小型组件/应用程序非常有用,这些组件/应用程序不会立即更改或支持依赖关系的不同实现,并且不太可能以不同的方式组成(例如,对不同的构建使用不同的依赖关系)。简单的微服务将适合此类别。

由注解组成的足够小的组件可以在不同的项目中直接使用,而无需使用各自的应用程序以XML配置覆盖它们。这将简化应用程序的应用程序依赖关系布线,并减少重复的设置。

但是,我们同意这些组件应具有我们的技术文档中描述的依赖项,以便在组装整个应用程序时,无需滚动代码甚至在IDE中加载模块,就可以对这些依赖项有所了解。

注释配置的组件的负面影响是,不同的组件可能会带来冲突的传递依赖关系,这又取决于最终的应用程序来解决冲突。如果未在XML中定义这些依赖关系,则冲突解决方法将变得非常有限,并且如果可能的话,它们偏离最佳实践的距离也很远。因此,在使用批注时,组件必须充分了解即将使用的依赖项。

通常,如果我们的依赖性可能因不同的情况而有所不同,或者模块可以与不同的组件一起使用,那么我们决定坚持使用XML。显然,两种方法之间必须有适当的平衡,并且必须有明确的用法构想。

有关混合方法的重要更新。最近,我们为质量保证团队创建了一个测试框架案例,该框架需要另一个项目的依赖。该框架旨在使用注释方法和Spring配置类,而被引用的项目具有一些我们需要引用的xml上下文。不幸的是,测试类(我们在其中使用org.testng了Spring支持)只能与xml或Java配置类一起使用,而不能将两者混合使用。

这种情况说明了混合使用方法会发生冲突的情况,很明显,必须将其中一种方法丢弃。在我们的案例中,我们迁移了测试框架以使用spring xml上下文,但是其他用途可能意味着相反。

cors跨域请求问题 关于spring -springmvc -mybatis .基于xml配置方式

cors跨域请求问题 关于spring -springmvc -mybatis .基于xml配置方式

1:场景还原

  写个日子长记性, 

 项目架构,spring + springMVC +mybatis + JDK 1.7.80   基于xml配置开发,  用的分布式dubbo+zookeeper .

    今天要写一个方法,  需求是  在购物车服务上,  调用一个个人中心的方法 ,用到了 跨域请求. 

    方法上加了该方法是get方法.

     在要跨域的服务中找到springMVC.xml  (A要调用B .  此时B就是要跨域的服务);

登录成功以后,我用localhost8083 去调用我要跨域的服务  写一个测试页面

 

 点击以后 报错

还是跨域问题,

怎么会有redirect. 

后来发现该方法登录成功以后, 携带token过来后, 跨域被拦截了 ,没有接收到反而跳转到了.新的页面,新的页面没有token.... 可以被理解为操作了cookie  

对cookie操作以后,  

 需要加上这个参数.

之后重新点击

   

success .    成功了

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

首先,我的登录 写了拦截器, 登录成功跳转页面. redirectPage(url), 如果没有登录则跳转到登录界面

 

 问题的关键:

ajax发送请求:  该参数的意思是, 只要对cookie 进行了操作, 就要加上  下面的参数, 

xhrFields: {
withCredentials: true // 携带跨域cookie
},

解决问题的方式 : 1: 先审视自己当前错误产生的原因,和 环境 ,(生命周期,及程序运行顺序)
2: 90%的错误 都会在控制台输出,仔细看最后一个 coasby:.... 问题一定在那, 先把控制台问题解决,再去解决浏览器控制台问题, consol.log(输出1,2,3看看在哪出错)
3: 百度是个很牛逼的解网,但是坑也有很多, 取其精华,去其糟粕.

加个好友吧,进群共同解决问题,加上备注 来源/博客园

java spring注释创建对象的xml配置

java spring注释创建对象的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
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd">

    <context:component-scan base-package="com.chexd"/>


</beans>

https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#spring-core

搜索“xmlns:context”

java – Junit – 通过注释加载Spring XML配置

java – Junit – 通过注释加载Spring XML配置

我正在使用Camel 2.15.2,Spring 4.1.7.RELEASE,CXF 3.0.4,Junit 4.12.

当我运行以下测试时,加载Spring应用程序上下文失败:

@RunWith(CamelSpringJUnit4ClassRunner.class)
@BootstrapWith(CamelTestContextBootstrapper.class)
@ContextConfiguration(locations=
            {
                "classpath:com/me/someFile.xml","classpath:meta-inf/spring/someFile.xml"
            })
public class MyRouteTest extends CamelTestSupport
{
    //...
}

以下是我得到的例外情况:

Caused by: java.lang.IllegalArgumentException: Cannot find RouteContext with id someRoute
    at org.apache.camel.model.RouteContextRefDeFinitionHelper.lookupRoutes(RouteContextRefDeFinitionHelper.java:65)

但是当我运行此测试时,Spring应用程序上下文成功加载:

public class MyRouteTest extends CamelSpringTestSupport
{
    @Override
    protected AbstractApplicationContext createApplicationContext()
    {
        return new ClasspathXmlApplicationContext(new String[]
                {
                    "classpath:com/me/someFile.xml","classpath:meta-inf/spring/someFile.xml"
                });
    }

    //...
}

为什么在第一种情况下会失败?

这两种方式加载Spring应用程序上下文不等同吗?

解决方法

我认为答案与这个问题相同. AbstractApplicationContext versus ApplicationContext如果没有看到实际的上下文文件,很难确切地看出@ContextConfiguration注释所需的更严格的ApplicationContext实现失败的原因.希望这可以帮助!

java – 基于Spring MVC注释的多模块项目配置

java – 基于Spring MVC注释的多模块项目配置

我实现了使用 Spring MVC,hibernate和Jax-RS实现的两个基于maven的独立Web项目.
但是我的要求改变了,现在我需要将项目作为一个子项目合并到另一个项目,这是我们的父项目.所以我使用maven多模块配置.

项目1:家长项目

<packaging>pom</packaging>
    <modules>
        <module>../child1</module>
        <module>../child2</module>
    </modules>

孩子1:

<packaging>jar</packaging>
    <parent>
        <groupId>com.xyz.alpha</groupId>
        <artifactId>parent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../parent</relativePath>
    </parent>

孩子2:

<packaging>jar</packaging>

    <dependency>
            <groupId>com.xyz.alpha</groupId>
            <artifactId>child1</artifactId>
            <version>2.0.2</version>
    </dependency>
    <parent>
        <groupId>com.xyz.alpha</groupId>
        <artifactId>parent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../parent</relativePath>
    </parent>

但是我需要在java中配置项目,以便它将扫描父项的组件以及子项目和执行项目.
目前我为每个项目单独配置:

AppIntializer.java

public class AppInitializer extends AbstractAnnotationConfigdispatcherServletinitializer {

    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[] { AppConfig.class };
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return null;
    }

    @Override
    protected String[] getServletMappings() {
        return new String[] { "/" };
    }
}

AppConfig.java

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.x.y")
public class AppConfig extends WebMvcConfigurerAdapter{


    @Bean
    public ViewResolver viewResolver() {
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setViewClass(JstlView.class);
        viewResolver.setPrefix("/WEB-INF/views/");
        viewResolver.setSuffix(".jsp");
        return viewResolver;
    }

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**");
    }

    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");


    }

}

HibernateConfiguration.java

@Configuration
@EnableTransactionManagement
@ComponentScan({ "com.x.y.configuration" })
@PropertySource(value = { "classpath:application.properties" })
public class HibernateConfiguration {

    @Autowired
    private Environment environment;

    @Bean
    public LocalSessionfactorybean sessionFactory() {
        LocalSessionfactorybean sessionFactory = new LocalSessionfactorybean();
        sessionFactory.setDataSource(dataSource());
        sessionFactory.setPackagesToScan(new String[] { "com.x.y.model" });
        sessionFactory.setHibernateProperties(hibernateProperties());
        return sessionFactory;
     }

    @Bean
    public DataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName(environment.getrequiredProperty("jdbc.driverClassName"));
        dataSource.setUrl(environment.getrequiredProperty("jdbc.url"));
        dataSource.setUsername(environment.getrequiredProperty("jdbc.username"));
        dataSource.setPassword(environment.getrequiredProperty("jdbc.password"));
        return dataSource;
    }

    private Properties hibernateProperties() {
        Properties properties = new Properties();
        properties.put("hibernate.dialect",environment.getrequiredProperty("hibernate.dialect"));
        properties.put("hibernate.show_sql",environment.getrequiredProperty("hibernate.show_sql"));
        properties.put("hibernate.format_sql",environment.getrequiredProperty("hibernate.format_sql"));
        properties.put("hibernate.hbm2ddl.auto",environment.getrequiredProperty("hibernate.hbm2ddl.auto"));
        return properties;        
    }

    @Bean
    @Autowired
    public HibernateTransactionManager transactionManager(SessionFactory s) {
       HibernateTransactionManager txManager = new HibernateTransactionManager();
       txManager.setSessionFactory(s);
       return txManager;
    }
}

解决方法

如果我是你,我将在父母中创建第三个模块,并将两个已经有新的孩子作为依赖关系.然后,您只需要根据需要为新模块配置弹簧.

关于基于Spring注释的DI与xml配置?spring基于注解的配置的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于cors跨域请求问题 关于spring -springmvc -mybatis .基于xml配置方式、java spring注释创建对象的xml配置、java – Junit – 通过注释加载Spring XML配置、java – 基于Spring MVC注释的多模块项目配置的相关信息,请在本站寻找。

本文标签: