首页
留言
Search
1
在Centos7下搭建Socks5代理服务器
1,036 阅读
2
在windows11通过Zip安装Mysql5.7
574 阅读
3
Mysql5.7开放远程登录
482 阅读
4
数据库
469 阅读
5
mysql5.7基本命令
377 阅读
综合
正则表达式
git
系统
centos7
ubuntu
kali
Debian
网络
socks5
wireguard
运维
docker
hadoop
kubernetes
hive
openstack
ElasticSearch
ansible
前端
三剑客
Python
Python3
selenium
Flask
PHP
PHP基础
ThinkPHP
游戏
我的世界
算法
递归
排序
查找
软件
ide
Xshell
vim
PicGo
Typora
云盘
安全
靶场
reverse
Java
JavaSE
Spring
MyBatis
C++
QT
数据库
mysql
登录
Search
标签搜索
java
centos7
linux
centos
html5
JavaScript
php
css3
mysql
spring
mysql5.7
linux全栈
ubuntu
BeanFactory
SpringBean
python
python3
ApplicationContext
kali
mysql8.0
我亏一点
累计撰写
139
篇文章
累计收到
8
条评论
首页
栏目
综合
正则表达式
git
系统
centos7
ubuntu
kali
Debian
网络
socks5
wireguard
运维
docker
hadoop
kubernetes
hive
openstack
ElasticSearch
ansible
前端
三剑客
Python
Python3
selenium
Flask
PHP
PHP基础
ThinkPHP
游戏
我的世界
算法
递归
排序
查找
软件
ide
Xshell
vim
PicGo
Typora
云盘
安全
靶场
reverse
Java
JavaSE
Spring
MyBatis
C++
QT
数据库
mysql
页面
留言
搜索到
34
篇与
java
的结果
2023-02-22
Java BeanFactory
Java BeanFactory快速入门Ioc思想实现1.创建普通的Maven项目2.在pom.xml文件中的project标签内导入Spring的jar包<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"> ...... <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.3.7</version> </dependency> </dependencies> </project>3.创建UserService接口4.创建UserServiceImpl类,并且继承UserService接口5.在resources中创建beans.xml文件,并且配置bean <?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"> <bean id="userService" class="org.example.UserServiceImpl"></bean> </beans>6.主函数运行 public static void main(String[] args) { // 创建工厂对象 DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory(); // 创建一个读取器(xml文件) XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(beanFactory); // 读取配置文件给工厂 reader.loadBeanDefinitions("beans.xml"); // 根据id获取bean实例对象 UserService userService = (UserService) beanFactory.getBean("userService"); System.out.println(userService); }DI思想实现,依赖注入1.创建UserDao接口和UserDaoIpml类,类继承UserDao接口2.在UserServiceImpl类中新建一个set方法,用于接受设置注入的对象 public class UserServiceImpl implements UserService{ // BeanFactory去调用该方法 从容器中获得userDao设置到此处 public void setUserDao(UserDao userDao){ System.out.println("BeanFactory去调用该方法 从容器中获得userDao设置到此处" + userDao); } }3.配置beans.xml文件,在bean标签中添加property标签实现依赖注入 <?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"> <bean id="userService" class="org.example.UserServiceImpl"> <property name="userDao" ref="userDao"></property> </bean> <bean id="userDao" class="org.example.UserDaoImpl"></bean> </beans>4.主函数调用,完成依赖注入 // 创建工厂对象 DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory(); // 创建一个读取器(xml文件) XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(beanFactory); // 读取配置文件给工厂 reader.loadBeanDefinitions("beans.xml"); // 根据id获取bean实例对象 UserService userService = (UserService) beanFactory.getBean("userService"); System.out.println(userService);BeanFactory去调用该方法 从容器中获得userDao设置到此处org.example.UserDaoImpl@49c43f4e org.example.UserServiceImpl@290dbf45
2023年02月22日
129 阅读
0 评论
0 点赞
2023-02-21
Java IoC、DI和AOP思想提出
Java IoC、DI和AOP思想提出IoC思想Inversion of Control,控制反转,强调的是原来在程序中创建Bean的权利反转给第三方。DI思想Dependency Injection,依赖注入,强调的Bean之间关系,这种关系第三方去负责设置。AOP思想Aspect Oriented Programming,面向切面编程,功能的横向抽取(面向对象功能是纵向设计一个Bean,横向抽取要比面向对象功能高级),主要实现方式是Proxy。框架概念的出现框架的基本特点:框架(Framework),是基于基础技术之上,从众多业务中抽取出的通用解决方案;是一个半成品,使用规定的语法开发可以提高开发效率,使用简单的代码完成复杂的基础业务使用大量的设计模式、算法、底层代码操作技术,如反射、内省、xml解析、注解解析等;具备扩展性JAVA中常见的框架:基础框架:完成基本业务操作的框架:MyBatis、Spring、SpringMVC、Struts2、Hibernate等服务框架:特定领域的框架,一般可以对外提供服务框架,如MQ、ES、Nacos等
2023年02月21日
92 阅读
0 评论
0 点赞
2023-02-20
Java 动态代理作用与应用场景
Java 动态代理作用与应用场景场景某系统有一个用户管理类,包含用户登录,删除用户,查询用户等功能,系统要求统计每个功能的执行耗时情况,以便后期观察程序性能定义接口public interface UserService { void login(String loginName,String passWord) throws Exception; void deleteUsers() throws Exception; String[] selectUsers() throws Exception; }定义接口重写实现类public class UserServiceable implements UserService{ @Override public void login(String loginName, String passWord) throws Exception { if (loginName.equals("admin") && passWord.equals("123456")){ System.out.println("登入成功"); }else { System.out.println("登入失败"); } Thread.sleep(1000); } @Override public void deleteUsers() throws Exception { System.out.println("删除成功"); Thread.sleep(1500); } @Override public String[] selectUsers() throws Exception { System.out.println("查询用户成功"); Thread.sleep(500); return new String[]{"张三", "李四", "王五"}; } }主函数执行方法public static void main(String[] args) throws Exception { UserService u = new UserServiceable(); UserService userService = (UserService) Proxy.newProxyInstance(UserServiceable.class.getClassLoader(), UserServiceable.class.getInterfaces(), new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("-----------------"); System.out.println(method.getName() + "方法开始执行"); long startTime = System.currentTimeMillis(); System.out.println("运行开始时间:" + String.valueOf(startTime)); Object invoke = method.invoke(u,args); long endTime = System.currentTimeMillis(); System.out.println("运行结束时间:" + String.valueOf(endTime)); System.out.println("deleteUsers方法耗时" + (endTime - startTime) / 1000.0 + "秒"); System.out.println("-----------------"); return invoke; } }); userService.login("admin","123456"); userService.login("admin1","1234561"); userService.selectUsers(); userService.deleteUsers(); }运行结果login方法开始执行 运行开始时间:1676900709812 登入成功 运行结束时间:1676900710820 deleteUsers方法耗时1.008秒 ----------------- ----------------- login方法开始执行 运行开始时间:1676900710825 登入失败 运行结束时间:1676900711832 deleteUsers方法耗时1.007秒 ----------------- ----------------- selectUsers方法开始执行 运行开始时间:1676900711832 查询用户成功 运行结束时间:1676900712335 deleteUsers方法耗时0.503秒 ----------------- ----------------- deleteUsers方法开始执行 运行开始时间:1676900712335 删除成功 运行结束时间:1676900713846 deleteUsers方法耗时1.511秒 -----------------
2023年02月20日
95 阅读
0 评论
0 点赞
2023-02-20
Java 动态代理
Java 动态代理程序为什么需要代理?对象如果嫌身上干的事情太多,可以通过代理来转移部分职责对象有什么方法写被代理,代理就一定要有对应的方法定义接口public interface Star { String sing(String name); void dance(); }定义继承接口重写类public class BigStar implements Star{ private String name; public BigStar(String name){ this.name = name; } public String sing(String name){ System.out.println(this.name + "正在唱" + name); return "谢谢!谢谢"; } public void dance(){ System.out.println(this.name + "正在跳舞"); } }主方法运行import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class Main { public static void main(String[] args) { Star star = new BigStar("小明"); /* ClassLoader loader,Class<?>[] interfaces,InvocationHandler h 参数1:用于指定一个类加载器 参数2:指定生成的代理长什么样子,有哪些方法 参数3:用来指定生成的代理对象要干什么事情 */ Star starProxy = (Star) Proxy.newProxyInstance(BigStar.class.getClassLoader(), BigStar.class.getInterfaces(), (Object proxy, Method method, Object[] args1) -> { if (method.getName().equals("sing")){ System.out.println("准备话筒"); }else if (method.getName().equals("dance")){ System.out.println("准备场地"); } return method.invoke(star,args1); }); starProxy.dance(); String text = starProxy.sing("好日子"); System.out.println(text); } }结果输出准备场地 小明正在跳舞 准备话筒 小明正在唱好日子 谢谢!谢谢
2023年02月20日
120 阅读
0 评论
0 点赞
2023-02-20
Java 注解作用与应用场景
Java 注解作用与应用场景模拟Junit框架需求:定义若干个方法,只要加了MyTest注解,就会触发该方法执行。分析:定义一个自定义注解MyTest,只能注解方法,存活范围是一直都在。定义若干个方法,部分方法加上@MyTest注解修饰,部分方法不加模拟一个junit程序,可以触发加了@MyTest注解方法执行package frame; import java.lang.annotation.ElementType; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import java.lang.annotation.Retention; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; @Target(ElementType.METHOD) //注解只能在方法使用 @Retention(RetentionPolicy.RUNTIME) //让注解可以一直存活 @interface MyTest { } public class DEMO { // @MyTest private void test1(){ System.out.println("-----test1-----"); } @MyTest public void test2(){ System.out.println("-----test2-----"); } // @MyTest public void test3(){ System.out.println("-----test3-----"); } @MyTest private void test4(){ System.out.println("-----test4-----"); } public static void main(String[] args) throws InvocationTargetException, IllegalAccessException { Class demoClass = DEMO.class; DEMO demo = new DEMO(); Method[] declaredMethods = demoClass.getDeclaredMethods(); for (Method declaredMethod : declaredMethods) { if (declaredMethod.isAnnotationPresent(MyTest.class)){ declaredMethod.setAccessible(true); declaredMethod.invoke(demo); } } } }运行结果-----test2----- -----test4-----
2023年02月20日
113 阅读
0 评论
0 点赞
1
...
3
4
5
...
7