2018-03-03-0.spring深入学习一

学习spring的过程中,我发现我对spring的认识还是只停留在2.x时代,并没有多少用java配置的方式去配置读取配置文件,而是一股脑的用xml,这种方法并不是spring想要推崇的,这里记录一下java方式配置spring配置文件:

1Spring的发展

1.1.Spring1.x 时代

在Spring1.x时代,都是通过xml文件配置bean,随着项目的不断扩大,需要将xml配置分放到不同的配置文件中,需要频繁的在java类和xml配置文件中切换。

1.2.Spring2.x时代

随着JDK 1.5带来的注解支持,Spring2.x可以使用注解对Bean进行申明和注入,大大的减少了xml配置文件,同时也大大简化了项目的开发。

那么,问题来了,究竟是应该使用xml还是注解呢?

最佳实践:
1、应用的基本配置用xml,比如:数据源、资源文件等;
2、业务开发用注解,比如:Service中注入bean等;

1.3.Spring3.x到Spring4.x

从Spring3.x开始提供了Java配置方式,使用Java配置方式可以更好的理解你配置的Bean,现在我们就处于这个时代,并且Spring4.x和Spring boot都推荐使用java配置的方式。
3.Spring的Java配置方式
Java配置是Spring4.x推荐的配置方式,可以完全替代xml配置。
3.1.@Configuration 和 @Bean
Spring的Java配置方式是通过 @Configuration 和 @Bean 这两个注解实现的:
1、@Configuration 作用于类上,相当于一个xml配置文件;
2、@Bean 作用于方法上,相当于xml配置中的<bean>;

2.1.创建工程以及导入依赖

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>cn.itcast.springboot</groupId>
    <artifactId>itcast-springboot</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.3.7.RELEASE</version>
        </dependency>
        <!-- 连接池 -->
        <dependency>
            <groupId>com.jolbox</groupId>
            <artifactId>bonecp-spring</artifactId>
            <version>0.8.0.RELEASE</version>
        </dependency>
    </dependencies>
    <build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <!-- 资源文件拷贝插件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <configuration>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <!-- java编译插件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
        <pluginManagement>
            <plugins>
                <!-- 配置Tomcat插件 -->
                <plugin>
                    <groupId>org.apache.tomcat.maven</groupId>
                    <artifactId>tomcat7-maven-plugin</artifactId>
                    <version>2.2</version>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
</project>

2.1. 编写User对象

**public** **class** User {

    **private**String username;

    **private**String password;

    **private**Integer age;

    **public** String getUsername() {

        **return** username;

    }

    **public** **void**setUsername(String username) {

        **this**.username= username;

    }

    **public** String getPassword() {

        **return** password;

    }

    **public** **void**setPassword(String password) {

        **this**.password= password;

    }

    **public** Integer getAge() {

        **return** age;

    }

    **public** **void**setAge(Integer age) {

        **this**.age= age;

    }

}

1.1.2. 编写UserDAO 用于模拟与数据库的交互


**public** **class** UserDAO {

    **public** List<User> queryUserList(){

List<User> result= **new** ArrayList<User>();

        // 模拟数据库的查询

        **for** (**int** i= 0; i< 10; i++) {

User user= **new** User();

            user.setUsername("username_"+ i);

            user.setPassword("password_"+ i);

            user.setAge(i + 1);

            result.add(user);

        }

        **return** result;

    }

}

1.1.3. 编写UserService****用于实现User数据操作业务逻辑


@Service

**public** **class** UserService {

    @Autowired // 注入Spring容器中的bean对象

    **private**UserDAO userDAO;

    **public** List<User> queryUserList() {

        // 调用userDAO中的方法进行查询

        **return** **this**.userDAO.queryUserList();

    }

}

1.1.4. 编写SpringConfig****用于实例化Spring容器


@Configuration //通过该注解来表明该类是一个Spring的配置,相当于一个<u>xml</u>文件

@ComponentScan(basePackages = "cn.itcast.springboot.javaconfig") //配置扫描包

**public** **class** SpringConfig {

    @Bean // 通过该注解来表明是一个Bean对象,相当于<u>xml</u>中的<bean>

    **public** UserDAO getUserDAO(){

        **return** **new**UserDAO(); // 直接new对象做演示

    }

}

1.1.5. 编写测试方法 用于启动Spring容器

**public** **class** Main {

    **public** **static** **void**main(String[] args) {

        // 通过Java配置来实例化Spring容器

AnnotationConfigApplicationContext <u>context</u>= **new** AnnotationConfigApplicationContext(SpringConfig.**class**);

        // 在Spring容器中获取Bean对象

UserService userService= context.getBean(UserService.**class**);

        // 调用对象中的方法

List<User> list= userService.queryUserList();

        **for**(User user: list) {

            System.***out***.println(user.getUsername() + ", "+ user.getPassword() + ", "+ user.getPassword());

        }

        // 销毁该容器

        context.destroy();

    }

}

1.1.6. 测试效果

1.1.7. 小结

从以上的示例中可以看出,使用Java代码就完美的替代xml配置文件,并且结构更加的清晰。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,991评论 19 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,971评论 6 342
  • 在React中, 对于组件事件的绑定是有很大的坑的.比如经常会报如下这种错误: Warning: setState...
    Oo晨晨oO阅读 1,638评论 0 0
  • 和同学聊天时,了解到他回家了,在济南上学的他虽说离家不如我远,但也不近!所以好奇的问了一句:怎么回家了。他说回去给...
    乐_cbf4阅读 1,044评论 1 3
  • 在我一次次辜负了关心我的所有人后,我很自责。昨天晚上,竟自然的打开了京东,挑选我以前最不愿提及的商品——...
    冬也有温暖阅读 207评论 0 0