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