记一次综合型流量分析 | 添柴不加火

张开发
2026/4/17 23:51:47 15 分钟阅读

分享文章

记一次综合型流量分析 | 添柴不加火
bean的作用域ioc容器默认bean是单例的singleton。bean对象的创建是在初始化上下文的时候就创建了每一次调用getBean()时都返回那个单例对象。// 这行代码会创建配置里面的bean对象ApplicationContext context new FileSystemXmlApplicationContext(D:/applicationContext.xml);那如何把bean设置成多例的// 由于这个bean是多例模式这行代码不会创建bean对象。而是在调用getBean时创建对象ApplicationContext context new ClassPathXmlApplicationContext(spring.xml,spring-dao.xml);// 这行代码才会创建bean对象Object user context.getBean(sb);自定义scope自定义Scope实现Scope接口spring内置了线程范围类 org.springframework.context.support.SimpleThreadScope添加配置信息GoF之工厂模式工厂模式的三种形态简单工厂模式Simple Factory又叫静态工厂方法模式。是工厂方法模式的一种特殊实现。工厂方法模式 Factory Method抽象工厂模式 Abstract Factory简单工厂模式简单工厂模式包括三个角色抽象产品、具体产品、工厂类。代码如下抽象产品类// 抽象产品角色public abstract class Weapon {public abstract void attack();}具体产品// 具体产品角色匕首public class Dagger extends Weapon{Overridepublic void attack() {System.out.println(匕首攻击...);}}// 具体产品角色战斗机public class Fighter extends Weapon{Overridepublic void attack() {System.out.println(战斗机攻击...);}}// 具体产品角色坦克public class Tank extends Weapon{Overridepublic void attack() {System.out.println( 坦克攻击。。。);}}工厂类角色// 工厂类角色public class WeaponFactory {/*** 静态方法根据传入的参数获取相应的武器* return*/public static Weapon get(String type){switch (type){case Tank:return new Tank();case Fighter:return new Fighter();case Dagger:return new Dagger();default:return null;}}}测试代码public class Main {public static void main(String[] args) {// 简单工厂模式达到职责分离。客户端不关心产品生产的细节// 客户端只负责消费工厂类负责生产。这就是简单工厂模式的作用。Weapon weapon1 WeaponFactory.get(Tank);weapon1.attack();Weapon weapon2 WeaponFactory.get(Fighter);weapon2.attack();Weapon weapon3 WeaponFactory.get(Dagger);weapon3.attack();}}优缺点优点实现职责分离。缺点假如要添加新产品。需要修改工厂类代码。显然违反了ocp原则。? 工厂类责任重大。一旦瘫痪这个系统必然瘫痪。工厂方法模式工厂方法模式保留了简单工厂模式的优点。同时解决了简单工厂模式的缺点。解决方法是一个工厂对应一个产品。符合ocp原则。优点扩展性高。要想增加一个产品。只要扩展一个工厂类就可以。屏蔽产品具体实现。调用者只关心产品的接口。缺点会使类的数量成倍增加增加系统复杂度。工厂方法模式的角色包括抽象工厂角色具体工厂角色抽象产品角色具体产品角色代码如下// 抽象产品角色public abstract class Weapon {public abstract void attack();}// 具体产品角色匕首public class Dagger extends Weapon {Overridepublic void attack() {System.out.println(匕首攻击...);}}// 具体产品角色枪械public class Gun extends Weapon{Overridepublic void attack() {System.out.println(枪械攻击...);}}// 抽象工厂类public abstract class WeaponFactory {public abstract Weapon get();}// 具体工厂类匕首工厂public class DaggerFactory extends WeaponFactory{Overridepublic Weapon get() {return new Dagger();}}// 具体工厂类枪械工厂public class GunFactory extends WeaponFactory{Overridepublic Weapon get() {return new Gun();}}测试代码public static void main(String[] args) {WeaponFactory weaponFactory new DaggerFactory();Weapon dagger weaponFactory.get();dagger.attack();WeaponFactory weaponFactory1 new GunFactory();Weapon gun weaponFactory1.get();gun.attack();}bean的实例化spring为bean提供了多种实例化的方式通常包括4种方式。通过构造方法实例化通过简单工厂模式实例化通过factory-bean实例化通过FactoryBean接口实例化通过构造方法实例化通过简单工厂模式实例化// 工厂类public class StarFactory {public static Star createStar() {return new Star();}}通过factory-bean实例化// 工厂方法模式中的具体产品类public class Gun {public Gun() {System.out.println(无参数构造器Gun());}}// 工厂方法模式中的具体工厂类public class GunFactory {public Gun get(){return new Gun();}}通过FactoryBean接口实例化通过factory-bean实例化的方式需要我们自定义factory-bean和factory-method。在spring中当自己的类实现了FactoryBean接口后factory-bean和factory-method就不需要指定了。factory-bean会自动指向实现FactoryBean接口的类factory-method会自动指向getObject()方法。public class PersonFactoryBean implements FactoryBean {Overridepublic Person getObject() throws Exception {// 手动创建对象return new Person();}Overridepublic Class getObjectType() {return null;}}车老竿游

更多文章