通过InitializingBean接口实现工厂自动选择对应模板满足各类需求
⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇首先是父类的总模板⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇
package com.DemoExample.demo;
import java.util.HashMap;
import org.springframework.beans.factory.InitializingBean;
import java.util.Map;
public abstract class ComAssetType implements InitializingBean {
private final static Map<String, ComAssetType> HASH_MAP = new HashMap<>();
//根据assetType获取指定对应模板
static ComAssetType getComAssetType(String asstype) {
return HASH_MAP.get(asstype);
}
//模板类型---------
public abstract String AssetType();
//InitializingBean接口为bean提供了初始化方法的方式,
//它只包括afterPropertiesSet方法,凡是继承该接口的类,在初始化bean的时候都会执行该方法。
@Override
public void afterPropertiesSet() throws Exception{
put(this.AssetType(),this);
}
private void put(String assetType,ComAssetType comAssetType){
HASH_MAP.put(assetType,comAssetType);
}
public void Text(){
System.out.println("模板打印");
}
}
种类一的方法
package com.DemoExample.demo;
import org.springframework.stereotype.Component;
//注意必须将此类注入交由框架初始化
@Component
public class OneSonType extends ComAssetType {
@Override
public String AssetType() {
return "1101";
}
@Override
public void Text(){
System.out.println("指定1101类方法执行成功");
}
}
种类2的执行方法
package com.DemoExample.demo;
import org.springframework.stereotype.Component;
@Component
public class TwoSonType extends ComAssetType {
@Override
public String AssetType() {
return "1102";
}
}
package com.DemoExample.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args );
ComAssetType comAssetType = ComAssetType.getComAssetType("1102");
comAssetType.Text();
}
}
测试:选择1101种类的text方法成功打印出"指定1101类方法执行成功"
D:\java\bin\java.exe -XX:TieredStopAtLevel=1 -noverify -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true "-javaagent:D:\Program Files\JetBrains\IntelliJ IDEA 2018.2.8\lib\idea_rt.jar=64164:D:\Program Files\JetBrains\IntelliJ IDEA 2018.2.8\bin" -Dfile.encoding=UTF-8 -classpath D:\java\jre\lib\charsets.jar;D:\java\jre\lib\deploy.jar;D:\java\jre\lib\ext\access-bridge-64.jar;D:\java\jre\lib\ext\cldrdata.jar;D:\java\jre\lib\ext\dnsns.jar;D:\java\jre\lib\ext\jaccess.jar;D:\java\jre\lib\ext\jfxrt.jar;D:\java\jre\lib\ext\localedata.jar;D:\java\jre\lib\ext\nashorn.jar;D:\java\jre\lib\ext\sunec.jar;D:\java\jre\lib\ext\sunjce_provider.jar;D:\java\jre\lib\ext\sunmscapi.jar;D:\java\jre\lib\ext\sunpkcs11.jar;D:\java\jre\lib\ext\zipfs.jar;D:\java\jre\lib\javaws.jar;D:\java\jre\lib\jce.jar;D:\java\jre\lib\jfr.jar;D:\java\jre\lib\jfxswt.jar;D:\java\jre\lib\jsse.jar;D:\java\jre\lib\management-agent.jar;D:\java\jre\lib\plugin.jar;D:\java\jre\lib\resources.jar;D:\java\jre\lib\rt.jar;C:\Users\hspcadmin\Desktop\demo\target\classes;C:\Users\hspcadmin\.m2\repository\org\springframework\boot\spring-boot-starter\2.4.0-SNAPSHOT\spring-boot-starter-2.4.0-20200915.191907-451.jar;C:\Users\hspcadmin\.m2\repository\org\springframework\boot\spring-boot\2.4.0-SNAPSHOT\spring-boot-2.4.0-20200915.191907-451.jar;C:\Users\hspcadmin\.m2\repository\org\springframework\spring-context\5.3.0-RC1\spring-context-5.3.0-RC1.jar;C:\Users\hspcadmin\.m2\repository\org\springframework\spring-aop\5.3.0-RC1\spring-aop-5.3.0-RC1.jar;C:\Users\hspcadmin\.m2\repository\org\springframework\spring-beans\5.3.0-RC1\spring-beans-5.3.0-RC1.jar;C:\Users\hspcadmin\.m2\repository\org\springframework\spring-expression\5.3.0-RC1\spring-expression-5.3.0-RC1.jar;C:\Users\hspcadmin\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\2.4.0-SNAPSHOT\spring-boot-autoconfigure-2.4.0-20200915.191907-451.jar;C:\Users\hspcadmin\.m2\repository\org\springframework\boot\spring-boot-starter-logging\2.4.0-SNAPSHOT\spring-boot-starter-logging-2.4.0-20200915.191907-451.jar;C:\Users\hspcadmin\.m2\repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;C:\Users\hspcadmin\.m2\repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;C:\Users\hspcadmin\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.13.3\log4j-to-slf4j-2.13.3.jar;C:\Users\hspcadmin\.m2\repository\org\apache\logging\log4j\log4j-api\2.13.3\log4j-api-2.13.3.jar;C:\Users\hspcadmin\.m2\repository\org\slf4j\jul-to-slf4j\1.7.30\jul-to-slf4j-1.7.30.jar;C:\Users\hspcadmin\.m2\repository\jakarta\annotation\jakarta.annotation-api\1.3.5\jakarta.annotation-api-1.3.5.jar;C:\Users\hspcadmin\.m2\repository\org\springframework\spring-core\5.3.0-RC1\spring-core-5.3.0-RC1.jar;C:\Users\hspcadmin\.m2\repository\org\springframework\spring-jcl\5.3.0-RC1\spring-jcl-5.3.0-RC1.jar;C:\Users\hspcadmin\.m2\repository\org\yaml\snakeyaml\1.26\snakeyaml-1.26.jar;C:\Users\hspcadmin\.m2\repository\org\projectlombok\lombok\1.18.12\lombok-1.18.12.jar;C:\Users\hspcadmin\.m2\repository\org\slf4j\slf4j-api\1.7.30\slf4j-api-1.7.30.jar com.DemoExample.demo.Application
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.4.0-SNAPSHOT)
2020-09-16 17:03:44.064 INFO 9156 --- [ main] com.DemoExample.demo.Application : Starting Application using Java 1.8.0_191 on WINDOWS-82JDS3E with PID 9156 (C:\Users\hspcadmin\Desktop\demo\target\classes started by hspcadmin in C:\Users\hspcadmin\Desktop\demo)
2020-09-16 17:03:44.070 INFO 9156 --- [ main] com.DemoExample.demo.Application : No active profile set, falling back to default profiles: default
2020-09-16 17:03:45.188 INFO 9156 --- [ main] com.DemoExample.demo.Application : Started Application in 1.971 seconds (JVM running for 4.964)
1101打印
Process finished with exit code 0
测试:通过选择1102种类的text方法打印出父类方法“模板打印”----自动默认父类执行方法;
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.4.0-SNAPSHOT)
2020-09-16 16:41:55.522 INFO 16416 --- [ main] com.DemoExample.demo.DemoApplication : Starting DemoApplication using Java 1.8.0_191 on WINDOWS-82JDS3E with PID 16416 (C:\Users\hspcadmin\Desktop\demo\target\classes started by hspcadmin in C:\Users\hspcadmin\Desktop\demo)
2020-09-16 16:41:55.525 INFO 16416 --- [ main] com.DemoExample.demo.DemoApplication : No active profile set, falling back to default profiles: default
2020-09-16 16:41:56.181 INFO 16416 --- [ main] com.DemoExample.demo.DemoApplication : Started DemoApplication in 1.19 seconds (JVM running for 3.01)
模板打印
(在父类可以写公共默认执行方法,子类写特定方法)