俗话说:刀久了不用会生锈,同样知识久了也会生疏,本文就spring的基本使用做一个回顾。
spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器(框架)
IOC:即控制反转,指创建对象的控制权转移给Spring框架进行管理,并由Spring根据配置文件去创建实例和管理各个实例之间的依赖, 对象与对象之间松散耦合,也利于功能的复用。
AOP:即面向切面,作为面向对象的一种补充,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块。这个模块被命名为“切面’’,减少系统中的重复代码,降低了模块间的耦合度,提高系统的可维护性。可用于权限认证,日志,事务管理。
优点:
简单演示一下
创建springboot项目
假设dao下有这样一个接口:
package com.lys.dao; public interface dbDao { void use(); }
并有两个实现上述接口的类:
package com.lys.dao.dbimpl; import com.lys.dao.dbDao; import org.springframework.stereotype.Repository; @Repository public class OracleImpl implements dbDao { @Override public void use() { System.out.println("Oracle 数据库"); } }
package com.lys.dao.dbimpl; import com.lys.dao.dbDao; import org.springframework.stereotype.Repository; //自动默认的bean的名字是类名首字母小写 @Repository("mysql")// 自定义bean的名字 public class MySQLImpl implements dbDao { @Override public void use() { System.out.println("mysql 数据库"); } }
实际使用中获取类的对象实例
有多种方式获取,分别是通过自定义名称,类名.class,或者默认的bean名称,如下;
@SpringBootTest class Spring12ApplicationTests implements ApplicationContextAware { private ApplicationContext applicationContext; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.applicationContext=applicationContext; } @Test public void test1(){ //方式1:使用bean的自定义名称 //MySQLImpl mySQL = (MySQLImpl) applicationContext.getBean("mysql"); //方式2:使用bean的默认名称(即类名的首字母小写) //MySQLImpl mySQL = (MySQLImpl) applicationContext.getBean("mySQLImpl"); //方式3: 使用类名.class指定bean类型 MySQLImpl mySQL =applicationContext.getBean(MySQLImpl.class); mySQL.use(); } }
4.其实获取bean对象的过程还可以进一步简化,通过@Autowired可以实现自动装配,上面的测试可以简化如下:
@SpringBootTest class Spring12ApplicationTests implements ApplicationContextAware { @Autowired private MySQLImpl mySQLImpl; @Test public void test1(){ mySQL.use(); } }
5.当要引用第三方库时如何注册bean呢?可以写一个配置类,加上注解@confuguration,标明这是一个特殊的类,在类中用@Bean可以自定义返回的Bean类型
举例:
package com.lys.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.text.SimpleDateFormat; @Configuration public class AlphaConfig { @Bean public SimpleDateFormat simpleDateFormat(){ //这里注册一个时间格式化的bean实例 return new SimpleDateFormat("yyyy-MM-dd"); } }
当需要时这样调用:
package com.lys; import java.text.SimpleDateFormat; import java.util.Date; @SpringBootTest class Spring12ApplicationTests implements ApplicationContextAware { @Autowired private SimpleDateFormat simpleDateFormat; @Test public void test3(){ System.out.println(simpleDateFormat.format(new Date())); } }
注解名称 | 功能 |
---|---|
@Controller | 标识该类是spring MVC controller处理器,用来创建http请求对象 |
@RestControlle | @Controller中返回json需要@ResponseBody来配合,如果直接用@RestController替代@Controller就不需要再配置@ResponseBody,默认返回json格式。 |
@Service | 用于标记业务层组件 |
@Autowired | 写在字段上或者方法上,用来装配bean |
@Repository | 用于标注数据访问组件,即Dao组件 |
@component | 当组件不好归类的时候,可以用此注解泛指组件 |
@Scope | 用来标识bean的作用域 |
@Qualifier | 当创建多个具有相同类型的bean时,可以使用@Qualifier和@Autowired注释使用哪一个真正的bean来装配,从而消除装配时可能遇到的混乱 |
@RequestMapping | 提供初步的请求映射信息 |
@RequestParam | 用于将请求参数区数据映射到功能处理方法的参数上 |
等等 | … |