牛客社区项目总结

注解

@Controller
@Service
@Repository(“自定义名字”) 数据库方面的 用在访问数据库接口的实现类上如 XXXImp,
如通过application.getBean(“alphaHibernate”,AlphaDao.class) 获取带有@Repository(“alphaHibernate”)的class
@Configuration 这是配置类,不是普通类
@Primary 优先装配,如applicationCOntext.getBean(AlphaDao.class) 会优先装配 带有@Primary的AlphaDao的实现类
@RequestMapping(“/路径”) 用在类、方法上,前端访问路径
如 @RequestMapping(“/user”) @RequestMapping(“/Profile”)
@ResopnseBody 表示不返回网页
@Autowired 自动注入

@Autowired//需要放在属性前
//用Qualifier加上Hibernate的名字即可
@Qualifier("alphaHibernate")
private AlphaDao alphaDao;
@Autowired
private AlphaService alphaService;

@SpringBootApplication 这是个配置类,用在CommunityApplication
在SpringBootApplication类中有下面的注解

  • @SpringBootConfiguration 这个类是配置文件
  • @EnableAutoConfiguration 启动自动配置
  • @ComponentScan() 组件扫描

application.properties的配置文件

#设置端口号
server.port=8080
#更改项目的访问路径
server.servlet.context-path=/community

此时访问项目的路径:localhost:8080/community

@RequestMapping(“/alpha”)可以加在对象/方法前面,表示访问方法的路径‘
@ResponseBody这样表示不返回网页。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
CommunityApplication背后做的事情:
在配置文件中会开启组件扫描。装载bean对象

在这里插入图片描述
在这里插入图片描述

实现测试

@SpringBootTest
Springboot Test 详解

@ContextConfiguration(classes = CommunityApplication.class)

@Primary//优先装配

@Repository//加上注解才能扫描
@Primary//优先装配
public class AlphaDaoMyBatisImpl implements AlphaDao {
    @Override
    public String select() {
        return "MyBatis";
    }
}

	@Test
	public void  testApplicationContext() {
		System.out.println(applicationContext);
		//有多个类实现AlphaDao时,加上@Primary会优先装配
		AlphaDao alphaDao = applicationContext.getBean(AlphaDao.class);
		System.out.println(alphaDao.select());
	}

@Repository(“alphaHibernate”)注解可以给配置的对象起名字。缺省的话默认就是类名(首字母小写)

//@Repository()  默认名字是类名首字母小写 alphaDaoHibernateImpl
@Repository("alphaHibernate")//名字太长,我们可以自定义 alphaHibernate
public class AlphaDaoHibernateImpl implements AlphaDao{
    @Override
    public String select() {
        return "Hibernate";
    }
}
	@Test
	public void  testApplicationContext() {
		System.out.println(applicationContext);
		AlphaDao alphaDao = applicationContext.getBean(AlphaDao.class);
		System.out.println(alphaDao.select());
		//根据名字获取Bean对象。不取名字的话会按照优先级获取
		alphaDao = applicationContext.getBean("alphaHibernate",AlphaDao.class);
		System.out.println(alphaDao.select());
	}

Bean管理自己的对象
管理 在对象创建前,销毁前能做的事

@Service//加注解
//@Scope("prototype")
public class AlphaService {
    public AlphaService() {
        System.out.println("实例化alphaService....");
    }
    //    初始化方法
//    容器调用方法
    @PostConstruct //在构造器后使用
    public void init(){
        System.out.println("初始化alphaService....");
    }
//    销毁方法
    @PreDestroy//在销毁对象之前调用
    public void destroy(){
        System.out.println("销毁alphaService....");
    }
}

测试

@Test
public void testBeanManagement(){
   AlphaService alphaService = applicationContext.getBean(AlphaService.class);
   System.out.println(alphaService);
    alphaService = applicationContext.getBean(AlphaService.class);
   System.out.println(alphaService);
}

bean只被实例化一次,销毁一次,是单例的
改为多例@Scope(“prototype”)

bean管理第三方对象-主动获取(比较笨拙)

第三方对象在jar包,我们需要用配置
@Bean用在方法前
创建config对象

@Configuration//注解表示是配置类,不是普通类
public class AlphaConfig {
//    配置第三方Bean,需要加注解
    //装载SimpleDateFormat这个对象,返回这个对象类型
    @Bean//这个Bean的名字 就是方法名simpleDateFormat,它是以方法命名的
    public SimpleDateFormat simpleDateFormat(){
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    }
}

//    根据类型获取
//    SimpleDateFormat simpleDateFormat = applicationContext.getBean(SimpleDateFormat.class);
//    根据名字获取,这个名字就是方法名
      SimpleDateFormat simpleDateFormat = applicationContext.getBean("simpleDateFormat",SimpleDateFormat.class);
      System.out.println(simpleDateFormat.format(new Date()));
第三方对象在jar包,我们需要用配置
创建config对象

@Configuration//注解表示是配置类,不是普通类
public class AlphaConfig {
//    配置第三方Bean,需要加注解
    //装载SimpleDateFormat这个对象,返回这个对象类型
    @Bean//这个Bean的名字 就是方法名simpleDateFormat,它是以方法命名的
    public SimpleDateFormat simpleDateFormat(){
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    }
}
测试
    @Test
   public void testBeanConfig(){
//    根据类型获取
//    SimpleDateFormat simpleDateFormat = applicationContext.getBean(SimpleDateFormat.class);
//    根据名字获取,这个名字就是方法名
      SimpleDateFormat simpleDateFormat = applicationContext.getBean("simpleDateFormat",SimpleDateFormat.class);
      System.out.println(simpleDateFormat.format(new Date()));
   }
}
// 输出结果2022-03-01 17:50:37

bean管理第三方对象-依赖注入

@Autowired 属性 set方法,构造器,都可以应用此类注解。

@Autowired//需要放在属性前
private AlphaDao alphaDao;
System.out.println(alphaDao);

有个小问题 :private AlphaDao alphaDao,因为MyBatis的优先级比Hibernate高,会优先输出MyBatis,但是我想获取Hibernate,做法如下
@Qualifier用于声明Bean的名称,该注解只能引用Bean的自定义名称

//依赖注入意思:自动获取AlphaDao类型的对象注入给alphaDao
@Autowired//需要放在属性前
//用Qualifier加上Hibernate的名字即可
@Qualifier("alphaHibernate")
private AlphaDao alphaDao;

  1. IOC是控制反转的意思,是面向对象的编程思想
  2. Spring容器也叫IOC容器,本质是一个工程,是自动创建的。Spring容器可以管理Bean及Bean的生命周期、作用域。Spring容器的顶层接口是BeanFactory,常用的子接口是ApplicationContext
  3. Spring采用依赖注入的方式,实现了IOC思想
  4. Spring Framework是Spring家族的基石,其他框架都依赖它
  5. @Autowire用于注入Bean ,可以注解属性、set方法、构造器
  6. @Configuration 用于声明配置类,该注解是基于@Component
  7. @Bean可以注解第三方以及自定义的Bean 对象

Spring MVC

网络协议

在这里插入图片描述
在这里插入图片描述

Spring mvc

spring mvc解决视图层问题

关闭thymeleaf的缓存(默认启动)
开发时关闭缓存,项目上线开启缓存

spring.thymeleaf.cache=false

向浏览器发送网页数据

get请求数据

get请求 @RequestMapping(path = “/students”,method = RequestMethod.GET)

@RequestParam(name = “current”,required = false,defaultValue = “1”) int current
System.out.println(current);
名字current需要保持一致
http://localhost:8080/community/alpha/student?current=10086

参数在路径上
@RequestMapping(path = “/student/{id}”,method = RequestMethod.GET)
public String getStudent(@PathVariable(name = “id”)int id){
}
访问时必须加上id即/11否则报错
http://localhost:8080/community/alpha/student/11

post提交数据

首先访问表单:路径:项目的结构
在这里插入图片描述
看到表单之后,填写数据,之后提交表单-提交的地址在action中指定,凡事表单,方法都是post

之后可以从指定的地址获取数据 @RequestMapping(value = “/students”, method = RequestMethod.POST)
name与表单中的input的name保持一致,数据就能传递过来
public String saveStudent(String name, int age){}

get请求处理html+thymeleaf(1)

访问某个地址,这个地址经过匹配到某个方法,方法计算封装数据,然后将数据通过thymeleaf模板渲染到前端

   @RequestMapping(path = "/teacher",method = RequestMethod.GET)
//    @ResponseBody 不加这个注解代表默认返回HTML页面
//    ModelAndView这个类型封装的是:给dispatcherServlet的module+view
    public ModelAndView getTeacher(){
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("name","张三");
        modelAndView.addObject("age",30);
//templates这个目录不用写,下级的目录需要写
//        view是指view.html这个文件
        modelAndView.setViewName("/demo/view");
        return modelAndView;
    }

在这里插入图片描述

get请求处理html+thymeleaf(2)
    @RequestMapping(path = "/school",method = RequestMethod.GET)
//    model对象是自动化实例化传递
    public String getSchool(Model model){
        model.addAttribute("name","北京大学");
        model.addAttribute("age",80);
//        返回值是String类型  是返回的view路径
        return "/demo/view";
    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值