EJB(面向组件编程), jboss,Spring是一个分层的Java SE/EE(web) full-stack(一站式)轻量级开源框架,以 IoC(Inversion Of Control:反转控制)和 AOP(Aspect Oriented Programming:面向切面编程)为内核。
一站式(一条龙,全家桶):Spring可以通过任何javaEE方向的开发支持
轻量级:当前的框架对硬件的要求不高,容易上手,容易使用
开源
无缝连接:整合目前市面上使用javaEE开发技术
在java三层架构当中分别提供了相应激素
编译不依赖,运行时依赖
使用工厂模式解耦合
IOC简介,设计思想
IOC作用
IOC配置文件详解:配置标签书写规范,配置标签的属性
bean类
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author: ChengLong
* @version: 11.0.2
* @datetime: 2021/9/16 13:58
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Student {
private Integer StuId;
private String StuName;
}
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author: ChengLong
* @version: 11.0.2
* @datetime: 2021/9/16 14:00
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Teacher {
private Integer TeaId;
private String TeaName;
}
spring配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans>
<bean id="student" class="com.offcn.bean.Student"></bean>
<bean id="teacher" class="com.offcn.bean.Teacher"></bean>
</bea
pom.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>om.offcn</groupId>
<artifactId>spring02</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.18</version>
</dependency>
</dependencies>
</project>
ApplicationContextDao
/**
* @author: ChengLong
* @version: 11.0.2
* @datetime: 2021/9/16 14:43
*/
public interface ApplicationContext {
public Object getBean(String name);
}
ClassPathXmlApplicationContext
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author: ChengLong
* @version: 11.0.2
* @datetime: 2021/9/16 14:43
*/
public class ClassPathXmlApplicationContext implements ApplicationContext {
Map<String,Object> map = new HashMap<>();
public ClassPathXmlApplicationContext(String path) {
//解析过程发生在构造器中
/**
* 1.构建解析器
* 2.解析指定位置的xml文件
* 3.获取根标签
* 4.获取子标签
* 5.获取子标签的属性
* 6.通过反射生成属性对应对象
* 7.将对象放入集合中
*/
try {
SAXReader reader =new SAXReader();
//解析配置文件,将文件构成dom对象
Document document = reader.read(path);
//根标签
Element rootElement = document.getRootElement();
// System.out.println(rootElement.getName());
List<Element> bean = rootElement.elements("bean");
for (Element one :bean){
String id = one.attributeValue("id");
String aClass = one.attributeValue("class");
//反射
Object instance = Class.forName(aClass).newInstance();
//放入集合
map.put(id,instance);
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public Object getBean(String name) {
return map.get(name);
}
}
bean实例化介绍
bean实例化方式
bean作用域
bean作用域介绍
所谓Bean的作用域其实就是指Spring给创建出的对象的存活范围,在配置文件中通过bean的scope属性指定
scope:指对象的作用范围
bean作用域的解析
当scope的取值为singleton时,单例
当scope的取值为prototype时,多例
构造函数注入
<!-- 构造器注入-->
<bean id="person" class="com.offcn.bean.Person">
<constructor-arg name="pid" value="12"></constructor-arg>
<constructor-arg name="pname" value="admin"></constructor-arg>
<!-- ref:属性的值必须是容器管理的对象-->
<constructor-arg name="dog" ref="newdog"></constructor-arg>
</bean>
setter注入
<!-- 通过对象set方法属性值注入-->
<bean id="newperson" class="com.offcn.bean.Person">
<property name="pid" value="11"></property>
<property name="pname" value="user"></property>
<property name="dog" ref="newdog"></property>
</bean>
注入集合数据
<!-- 数组注入-->
<property name="myStrs">
<array>
<value>red</value>
<value>green</value>
<value>blue</value>
</array>
</property>
<!-- list注入-->
<property name="myList">
<list>
<ref bean="newdog"></ref>
<bean class="com.offcn.bean.Dog">
<property name="did" value="004"></property>
<property name="fuColor" value="blue"></property>
</bean>
</list>
</property>
<!-- set集合-->
<property name="mySet">
<set>
<value>张三</value>
<value>赵六</value>
<value>王五</value>
</set>
</property>
<!-- map集合注入-->
<property name="myMap">
<map>
<entry>
<!-- 键-->
<key>
<value>a</value>
</key>
<!-- 值-->
<value>李四</value>
</entry>
<entry>
<key>
<value>a</value>
</key>
<value>李四2</value>
</entry>
</map>
</property>
<!--props注入-->
<property name="myProps">
<props>
<prop key="username">root</prop>
<prop key="password">123</prop>
</props>
</property>
Spring模块化配置方式一
并列的多个配置文件 直接编写多个配置文件,比如说beans1.xml,beans2.xml......, 然后在创建ApplicationContext的时候,直接传入多个配置文件。
ApplicationContext context = new ClassPathXmlApplicationContext("spring-dog.xml","spring-person.xml");
Spring模块化配置方式二
<import resource="classpath:spring-dog.xml"></import>
pojo
/**
* @author: ChengLong
* @version: 11.0.2
* @datetime: 2021/9/16 20:43
*/
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Person {
private Integer p_id;
private String p_name;
}
dao
import com.offcn.pojo.Person;
/**
* @author: ChengLong
* @version: 11.0.2
* @datetime: 2021/9/16 16:38
*/
public interface PersonDao {
public int addPerson(Person person);
}
接口实现
import com.offcn.pojo.Person;
import org.springframework.jdbc.core.JdbcTemplate;
/**
* @author: ChengLong
* @version: 11.0.2
* @datetime: 2021/9/16 16:45
*/
public class PersonDaoImpl implements PersonDao {
//数据库交互方法必须依赖一个对象 jdbcTemplate
private JdbcTemplate jdbcTemplate;
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public int addPerson(Person person){
String sql = "insert into person(p_id,p_name) values(?,?)";
int updata = jdbcTemplate.update(sql,person.getP_id(),person.getP_name());
return updata;
}
}
servicedao
import com.offcn.pojo.Person;
/**
* @author: ChengLong
* @version: 11.0.2
* @datetime: 2021/9/16 20:48
*/
public interface PersonService {
public boolean savePerson(Person person);
}
service
import com.offcn.dao.PersonDao;
import com.offcn.pojo.Person;
/**
* @author: ChengLong
* @version: 11.0.2
* @datetime: 2021/9/16 20:48
*/
public class PersonServiceImpl implements PersonService {
private PersonDao personDao;
public void setPersonDao(PersonDao personDao) {
this.personDao = personDao;
}
@Override
public boolean savePerson(Person person) {
return personDao.addPerson(person)>0;
}
}
spring配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--管理一切java对象-->
<bean id="service" class="com.offcn.service.PersonServiceImpl">
<property name="personDao" ref="pdao"></property>
</bean>
<!-- dao对象-->
<bean id="pdao" class="com.offcn.dao.PersonDaoImpl">
<property name="jdbcTemplate" ref="jdbcTemplate"></property>
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<!-- 操作数据库的工具类,在操作数据库过程中使用数据库连接-->
<constructor-arg name="dataSource" ref="ds"></constructor-arg>
</bean>
<!-- 容器管理的数据源对象-->
<bean id="ds" class="com.alibaba.druid.pool.DruidDataSource">
<property name="username" value="root"></property>
<property name="password" value="1s2h3a4o56789"></property>
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://192.168.196.181:3306/0622db"></property>
</bean>
</beans>
测试
import com.offcn.dao.PersonDao;
import com.offcn.pojo.Person;
import com.offcn.service.PersonService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* @author: ChengLong
* @version: 11.0.2
* @datetime: 2021/9/16 20:52
*/
public class SpringJdbc {
@Test
public void test1(){
ApplicationContext context = new ClassPathXmlApplicationContext("spring-core.xml");
PersonDao personDao = (PersonDao) context.getBean("pdao");
Person person = new Person();
person.setP_id(12);
person.setP_name("武松");
PersonService personService = (PersonService) context.getBean("service");
boolean b = personService.savePerson(person);
if(b){
}else{
}
}
}
原文:https://www.cnblogs.com/chenglong0201/p/15302442.html