当前位置:   article > 正文

牛客网牛客社区项目--day1 Spring_牛客网项目

牛客网项目

今天遇到的困难

  1. 在此之前学了一些Maven、Spring、Mybatis相关的知识,因此听今天的课相对来说不是很困难,但所听老师不同,自然收获不一。总的来说算是一场复习,让我明白了一些原理
  2. 最棘手的问题是使用spring initializr。我用的是Java8,当创建springboot项目时要选择3版本以下的版本(这是个欲哭无泪的点,后来我选择了2.7.12才解决了这个问题)
  3. 在 spring initializr中没有aspects(aop的功能)这就需要自己去pom导入依赖了
    1. <dependency>
    2. <groupId>org.springframework.boot</groupId>
    3. <artifactId>spring-boot-starter-aop</artifactId>
    4. </dependency>

快速创建springboot项目的教程

  1. 使用官网http://start.spring.io打包解压,然后用idea打开即可
  2. 用idea自带的,其实底层也是基于官网

Spring入门

  1.  我对Spring的理解: Spring的两大核心思想是IOC和AOP,这里先探讨其一IOC。Inversion of Control 即控制反转。之前我们需要对象的时候需要手动new一个,而IOC是将设计好的对象交给容器管理。
  2. 容器的创建: 
    1. public class CommunityApplication {
    2. public static void main(String[] args) {
    3. SpringApplication.run(CommunityApplication.class, args);
    4. }

    在这个方法的的底层不仅会启动Tomcat还会自动帮我们创建Spring容器,容器被创建之后会自动扫描配置类所在的包以及子包中的bean并装配到容器中

  3. 定义Bean: 有四个注解可以将类定义为可以被扫描到的Bean,分别是@Component、@Controller、@Service、@Repository

     4. 获取Bean:

  • 按类型获取,当一种类只有一个Bean时可以使用按类型获取

    1. AlphaService alphaService = applicationContext.getBean(AlphaService.class);
    2. System.out.println(alphaService);

    这是我创建了一个名为AlphaService的类,并用@Service注解定义其为Bean放入到Spring中。因为这个类型只有这一个Bean,所以可以用(类名.class)从Spring容器中获取到这个Bean

  • 同一类型下有多个Bean时若要获取某一个Bean还可以用注解@Primary指定

  • 按名称获取,当这个类中的Bean不止一个时,若要指定获取哪一个Bean就要按名称来获取这里我定义了一个名为alphaHibernate的Bean

    1. @Repository("alphaHibernate")
    2. public class AlphaDaoHibernateImpl implements AlphaDao{
    3. @Override
    4. public String select() {
    5. return "Hibernate";
    6. }

    这是按名称获取指定Bean

     AlphaDao alphaDao1= (AlphaDao) applicationContext.getBean("alphaHibernate");

面向接口编程的好处: 

  • 解耦 比如在使用接口调用方法时两个Bean都有同样的方法,在调用时可以直接利用接口名.方法名调用,因为两个Bean方法名相同所以就不用再去修改调用代码

装配第三方Bean

使用@Configuration定义此类为配置类然后用@Bean写在一个方法上,方法名就是Bean的名字

Scope作用域

  • 默认singleton,单例(无论获取多少次Bean都是相同的)
  • prototype, 多例
    1. @Test
    2. public void testBeanManagement(){
    3. AlphaService alphaService = applicationContext.getBean(AlphaService.class);
    4. System.out.println(alphaService);
    5. System.out.println(alphaService.se());
    6. AlphaService alphaService1 = applicationContext.getBean(AlphaService.class);
    7. System.out.println(alphaService);
    8. System.out.println(alphaService1.se());
    9. }

              

生命周期:

  •  init,要用注解@PostConstruct声明此方法为初始化方法,初始化方法在构造方法之后调用

  • destroy,要用注解@PreDestroy声明此方法为销毁方法,销毁方法在销毁之前调用

自动装配:

  不用再去获取Bean实例化,可以直接将Bean注入到定义的对象中 代码示例:

@Autowired
@Qualifier(指定名称)依赖于@Autowired,不能单独使用
  1. @Autowired
  2. private AlphaService alphaService;
  3. @Autowired
  4. private SimpleDateFormat simpleDateFormat;
  5. @Autowired
  6. @Qualifier("alphaHibernate")
  7. private AlphaDao alphaDao;
  8. @Test
  9. public void testDI(){
  10. System.out.println(alphaService.se());
  11. System.out.println(alphaDao);
  12. System.out.println(simpleDateFormat);
  13. }

串总:

由controll处理浏览器的请求,请求过程中会调用业务层(service)组件,业务组件会调用dao访问数据库,他们的关系可以用依赖注入的方式实现     

@RequestMapping("路径")
@ResponseBody 指定类型

          

总结: 今天是牛客网社区项目的第一天,主要是学习基础知识,并没有进行实际的开发。但万丈高楼平地起,基础还是要先打牢的。虽然之前学习过今天的知识,但今天学习下来觉得还是眼前一亮。因为,书读百遍其义自见。

坚持就是胜利,加油。明天将进行Springmvc的学习

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/572952
推荐阅读
相关标签
  

闽ICP备14008679号