扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
Spring核心: Ioc (控制反转):降低程序间的耦合(依赖关系)
站在用户的角度思考问题,与客户深入沟通,找到班戈网站设计与班戈网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:做网站、成都做网站、企业官网、英文网站、手机端网站、网站推广、国际域名空间、虚拟主机、企业邮箱。业务覆盖班戈地区。spring配置:https://blog.csdn.net/qq_47959003/article/details/
Spring开发步骤:
Spring重点配置:
id属性:在容器中Bean实例的唯一标识,不允许重复
class属性:要实例化的Bean的全限定名
scope属性:Bean的作用范围,常用是Singleton(默认)和prototype
标签:属性注入
name属性:属性名称
value属性:注入的普通属性值
ref属性:注入的对象引用值
标签
Spring配置properties文件
//导入context加载路径,复制beans,把beans改为context//class 表示引入的解析文件对象 //name自定义,key为文件中的对应对象
简单实现案例:
采用mvc(model,vision,controll)三层架构设计模式
设计Dao接口,Dao实现类接口,实现方法
Service层接口,service实现类接口,方法实现ApplicationContext对象实例化
controller实现Service对象方法,实例化对象实现方法
dao层:
接口:
public interface UserDao {
void run();
}
实现方法:
import com.example.spring_ioc_1.Dao.UserDao;
public class UserDaoImpl implements UserDao {
@Override
public void run() {
System.out.println("run.....");
}
}
Service层:
接口:
public interface UserService {
public void save();
}
实现方法:
import com.example.spring_ioc_1.Dao.UserDao;
import com.example.spring_ioc_1.Service.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class UserServiceImpl implements UserService {
public void save() {
ApplicationContext app=new ClassPathXmlApplicationContext("applicationContext.xml");
UserDao userDao = (UserDao) app.getBean("userDao");
userDao.run();
}
}
web控制中心:
import com.example.spring_ioc_1.Service.UserService;
import com.example.spring_ioc_1.Service.impl.UserServiceImpl;
public class Controller {
public static void main(String[] args) {
UserService userService = new UserServiceImpl();
userService.save();
}
}
applicationContext.xml 配置:
Bean依赖注入:
采用注入方法就不用实现方法
– 构造方法
name属性指向构造方法中的userDao,ref指向id中的userDao
– set方法
当注入的属性值较多时,使用p命名空间
属性注入
– 普通属性注入:
– 集合注入:
创建集合
map对象设置实现类
setter,getter,tostring方法
bean编写:
配置文件的引入:
当业务较多时,为了区分业务模块,可以进行模块的引入
Spring相应api:
当容器中的bean相同class属性只有一种时,可以使用
相同class出现多次时使用id指向唯一性:
数据源开发:
– c3p0数据源
com.mchange c3p00.9.5.2
@Test
//测试c3p0数据源
public void test1() throws PropertyVetoException, SQLException {
ComboPooledDataSource source = new ComboPooledDataSource();
source.setDriverClass("com.mysql.cj.jdbc.Driver");
source.setJdbcUrl("jdbc:mysql://localhost:3306");
source.setUser("sa");
source.setPassword("123456");
Connection connection = source.getConnection();
System.out.println(connection);
connection.close();
}
– druid数据源
com.alibaba druid1.2.8
@Test
//测试druid数据源
public void test2() throws SQLException {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306");
dataSource.setUsername("sa");
dataSource.setPassword("123456");
DruidPooledConnection connection = dataSource.getConnection();
System.out.println(connection);
connection.close();
}
– 抽取properties文件进行测试
properties文件:
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306
jdbc.user=sa
jdbc.password=123456
@Test
//测试c3p0数据源(抽取properties文件)
public void test3() throws PropertyVetoException, SQLException {
//读取配置文件
ResourceBundle rb = ResourceBundle.getBundle("jdbc"); // 传入文件地址
String driver = rb.getString("jdbc.driver");
String url = rb.getString("jdbc.url");
String user = rb.getString("jdbc.user");
String password = rb.getString("jdbc.password");
//创建数据源对象,设置连接
ComboPooledDataSource dataSource=new ComboPooledDataSource();
dataSource.setDriverClass(driver);
dataSource.setJdbcUrl(url);
dataSource.setUser(user);
dataSource.setPassword(password);
Connection connection = dataSource.getConnection();
System.out.println(connection);
connection.close();
}
@Test
//测试druid数据源(抽取properties文件)
public void test4() throws SQLException {
//读取配置文件
ResourceBundle rb = ResourceBundle.getBundle("jdbc"); // 传入文件地址
String driver = rb.getString("jdbc.driver");
String url = rb.getString("jdbc.url");
String user = rb.getString("jdbc.user");
String password = rb.getString("jdbc.password");
//创建数据源对象,设置连接
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driver);
dataSource.setUrl(url);
dataSource.setUsername(user);
dataSource.setPassword(password);
DruidPooledConnection connection = dataSource.getConnection();
System.out.println(connection);
connection.close();
}
spring加载数据源对象
根据抽取数据源对象的不同,需要注意class引用的对象
引入context命名空间
spring加载外部properties文件,并且配置对象
模板:
实现:
@Test
//测试spring容器产生数据源对象
public void test5() throws SQLException {ApplicationContext app=new ClassPathXmlApplicationContext("applicationContext.xml");
ComboPooledDataSource dataSource = (ComboPooledDataSource) app.getBean("dataSource");
Connection connection = dataSource.getConnection();
System.out.println(connection);
connection.close();
}
注解开发:
案例实现:
配置Dao层
Service层
web层
以及applicationContext.xml文件
applicationContext.xml文件配置组件库的扫描,以便对注解开发的命令进行实例化
Dao层
userDaoImpl文件:(语句替换)
// @Component("userDao")
userServiceIml文件:
@value标签
1:直接赋值普通属性
2:进行properties文件的抽取(spring需要配置命名空间)
注解标注:
4种注解含义一样,对于实现的层级不一样
初始方法,销毁方法
销毁方法需要在web层手动结束,初始方法在程序执行开始执行
实现在Dao层
web层关闭
Spring新注解:
配置spring核心类,还可以根据应用的不同建立不同的分文件
spring核心类,该类调用
//标志该类是Spring核心配置类
@Configuration
//// @ComponentScan("spring_ioc_1")
//导入数据类对象到核心配置文件中来,当需要导入多个时用{}
@Import({DataSourceConfiguration.class})
public class SpringConfiguration {}
数据类:
//// @PropertySource("classpath:jdbc.properties")
public class DataSourceConfiguration {@Value("${jdbc.driver}")
private String driver;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.user}")
private String user;
@Value("${jdbc.password}")
private String password;
@Bean("dataSource")
public ComboPooledDataSource getDataSource() throws PropertyVetoException { //Spring会将当前的返回值以指定名称存储到Spring容器中
ComboPooledDataSource source = new ComboPooledDataSource();
source.setDriverClass(driver);
source.setJdbcUrl(url);
source.setUser(user);
source.setPassword(password);
return source;
}
}
基于Spring的Test框架:
导入配置:
org.springframework spring-test 5.0.2.RELEASE
定义框架
//基于spring框架的测试
@RunWith(SpringJUnit4ClassRunner.class)
//该方法为xml文档测试,声明Spring容器的架构指定
//@ContextConfiguration("classpath:applicationContext.xml")
@ContextConfiguration(classes={SpringConfiguration.class})
进行测试编写
//进行字段注入
@Autowired
private UserService userService;
@Autowired
private DataSource dataSource;
@Test
public void test1() throws SQLException {userService.save();
System.out.println(dataSource.getConnection());
}
Spring集成web环境——基本三层架构
业务层——>对象层——>Dao层
配置tomcat服务器
业务层:
public class userServlet extends HttpServlet {@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {ApplicationContext app=new ClassPathXmlApplicationContext("applicationContext.xml");
UserService userService = (UserService) app.getBean("userService");
userService.save();
}
}
web.xml配置
导入相应的坐标实现UserServlet com.example.spring_ioc_1.web.userServlet UserServlet /userServlet
实现监听对象,减少引用上下文实例的实现:
spring架构实现的应用上下文架构:
不知道为啥用不了
org.springframework.web.context.ContextLoaderListener contextConfigLocation classpath:applicationContext.xml
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流