目录
1.核心概念
- IoC ( Inversion of Control ) 控制反转:把对象的创建控制权由程序转移到外部,这种思想称为控制反转(spring中就提供了这种容器,也叫ioc容器 统称为Bean)。
- DI ( Dependency Injection ) 依赖注入:在容器中建立bean与bean之间的依赖关系的整个过程,称为依赖注入。
- AOP(Aspect Oriented Programming)面向切面编程:简单来说就是分离一个事件的前后,例如数据库查询这件事,先连接数据库,然后查询我们所需要的数据,最后关闭数据库。查询数据这件事就是一个切点,切点前后就是切面,连接数据库和关闭数据库服务了我们查询数据这个操作。
- Spring就是一个轻量级控制反转(IOC)和面向切面(AOP)的容器框架,主要是为了简化大型应用开发的复杂性而诞生的。
- 引入spring
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
2.Bean标签
-
id 属性:声明该bean的id,该id在整个配置文件中唯一
-
name 属性:声明该bean的名称,可以有多个值,利于访问
-
class 属性:声明该bean的class对象类型,输入值为类的完整名称
-
scope属性:声明bean的作用范围
-
singleton : 单例,由spring保证该bean在整个spring容器中只存在一个对象实例;
-
prototype: 非单例,每次使用都将创建一个新的对象;
-
-
property子标签:用于解耦合,就是不需要new一个对象,name属性就是对象,ref属性就是类名。也可以使用autowire="byType"自动装配,可以通过类型,name等自动装配
<bean id="bookServer" class="com.pack.BookServer" scope="singleton">
<property name="daoimpl" ref="bookDaoimpl"/>
</bean>
这里放一张图解释一下
3.数据注入
- 简单类型
<bean id="bookDao" class="com.pack.BookDaoImpl">
<property name="databaseName" value="mysq1"/>
<property name="connectionNum" value="10"/>
</bean>
<!--构造器注入-->
<constructor-arg index="0" value=""></constructor-arg>
<constructor-arg index="1" value=""></constructor-arg>
把mysql赋值给类中databaseName这个变量
- 引用类型
<bean id="bookService" class="com.pack.BookServiceImpl">
<property name="bookDao" ref="bookDao"/>
<property name="userDao" ref="userDao"/>
</bean>
引用bookDao这个Bean赋值给类中bookDao这个变量
4.加载properties文件
jdbc.properties文件内容
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc :mysql://127.0.0.1:3306 / spring_dbjdbc.username=root jdbc.password=root
使用location加载文件,开发中最好用"classpath*:*.properties"加载全部properties,也可以选择加载指定文件。加载完成后就可以用占位符来获取相应的值。
5.获取spring容器
//具有关闭Bean的方法close()
// ClassPathXmlApplicationContext ctx= new ClassPathXmlApplicationContext("applicationContext.xml");
// ctx.registerShutdownHook();//设置关闭钩子
ApplicationContext ctx= new ClassPathXmlApplicationContext("applicationContext.xml");
BookDaoimpl dao= (BookDaoimpl) ctx.getBean("dao");
dao.save();
6.注解开发Bean
@Component:通用的bean定义
@Controller:用于表现层bean定义
@service :用于业务层bean定义
@Repository :用于数据层bean定义
利用Bean配置类完全替换配置文件
@Configuration //Bean配置
@ComponentScan("com.pack") //扫描
@PropertySource("jdbc.properties")//加载properties文件,不能使用*号,用数组
@Import(jdbcConfig.class)//导入Bean配置类
public class Springconfig {
}
@Component("dao")
@Scope("singleton") //prototype
public class BookDaoimpl {
public void save(){
System.out.println("存储");
}
//生命周期
@PostConstruct
public void init(){
System.out.println("初始化");
}
@PreDestroy
public void destroy(){
System.out.println("销毁");
}
}
7.注解的数据注入
@Service //可以指定Bean名
public class BookServer {
@Autowired //自动装配注入
@Qualifier("dao") //指定注入的类型名
private BookDaoimpl daoimpl;
@Value("简单类型注入")
private String name;
@Value("${jdbc.password}")
private String password;
public void save(){
System.out.println("Server运行"+name+password);
}
}
配置类的引用
AnnotationConfigApplicationContext ctx= new AnnotationConfigApplicationContext(Springconfig.class);
BookDaoimpl dao= (BookDaoimpl) ctx.getBean("dao"); //括号内是注解名,也可以是类
// BookServer dao= ctx.getBean(BookServer.class);
dao.save();
ctx.close();
最后用一张表来对比一下两种方式
XML | 注解 | |
bean | <bean/> id属性 class属性 | @Component(通用) @controller @Service @Repository @ComponentScan(扫描) |
数据注入 | 引用/简单类型 setter注入(set方法) 构造器注入(构造方法) 自动装配 | @Autowired @Qualifier @value |
第三方bean | bean标签 | @Bean(创建配置类) |
作用范围(是否单例) | scope属性 | @scope |
生命周期 | init-method destroy-method | @Postconstructor @PreDestroy |
以上就是spring的简单入门教程,第一次写博客,内容有点乱,以后慢慢改进。