我有以下组件,分为两个不同的文件:
@echo off
Color 9B & Mode con cols=90 lines=5
Title "%~nx0" for Multi-files VirusTotal Uploader by Hackoo 2017
:::::::::::::::::::::::::::::::::::::::::
:: Automatically check & get admin rights
:::::::::::::::::::::::::::::::::::::::::
Set TmpLogFile=%tmp%\TmpLog.txt
If Exist %TmpLogFile% Del %TmpLogFile%
REM --> Check for permissions
Reg query "HKU\S-1-5-19\Environment" >%TmpLogFile% 2>&1
REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
Echo.
ECHO **************************************
ECHO Running Admin shell... Please wait...
ECHO **************************************
goto UACPrompt
) else ( goto gotAdmin )
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
set params = %*:"=""
echo UAC.ShellExecute "cmd.exe", "/c ""%~s0"" %params%", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
del "%temp%\getadmin.vbs"
exit /B
:gotAdmin
::::::::::::::::::::::::::::
::START
::::::::::::::::::::::::::::
Title "%~nx0" for Multi-files VirusTotal Uploader by Hackoo 2017
:Main
Mode con cols=90 lines=3 & color 9E
Set "VirusTotalUploaderTool=%ProgramFiles%\VirusTotalUploader2\VirusTotalUploader2.2.exe"
If Not Exist "%VirusTotalUploaderTool%" ( Call:Downloading )
Set "Files_List2Upload=%~dp0ListFiles.txt"
echo(
echo Creating a list of all *.exe files located on your temporary folder ...
Timeout /t 4 /NoBreak>nul
Dir /b /s /A:-D "%Temp%\*.exe" > "%Files_List2Upload%"
If Not Exist "%Files_List2Upload%" ( Goto :Error )
For /f "delims=" %%f in ('Type "%Files_List2Upload%"') Do (
Call:Upload2VirusTotal "%%~f"
)
Taskkill /im "VirusTotalUploader2.2.exe" /f >nul 2>&1
Exit
::*********************************************************************************
:Upload2VirusTotal <File>
Title "%~nx0" for Multi-files VirusTotal Uploader by Hackoo 2017
Cls
Set "File2Upload=%~1"
echo(
echo Please wait a while ! Uploading file "%~nx1" to VirusTotal is in progress ...
Start "" "%VirusTotalUploaderTool%" "%File2Upload%"
Timeout /t 10 /nobreak>nul
exit /b
::*********************************************************************************
:Downloading
Title Downloading VirusTotal Uploader Tool v2.2 by Hackoo 2017
Set "URL=https://www.virustotal.com/static/bin/vtuploader2.2.exe"
Rem Create "MyDownload" folder in the temporary folder
set "MyDownload_Folder=%temp%\MyDownload"
If Not Exist "%MyDownload_Folder%" MD "%MyDownload_Folder%"
Set "Setup_File=%MyDownload_Folder%\vtuploader2.2.exe"
echo(
echo Please wait a while ! downloading "vtuploader2.2.exe" is in progress ...
Rem Downloading vtuploader2.2.exe to the temporary folder
Call :Download "%URL%" "%Setup_File%"
cls
Color 9A
Title Installing "vtuploader2.2.exe" is in progress ...
echo(
echo Installing "vtuploader2.2.exe" is in progress ...
Rem Silent installation of vtuploader2.2.exe the uploading tool
Call :Install_Silently %Setup_File%
Rem Removing the download folder
Call :Clean %MyDownload_Folder%
Goto Main
::*********************************************************************************
:Download <url> <File>
Powershell.exe -command "(New-Object System.Net.WebClient).DownloadFile('%1','%2')"
exit /b
::*********************************************************************************
:Install_Silently <Setup_File>
"%~1" /S
exit /b
::*********************************************************************************
:Clean <Folder_Setup>
RD "%~1" /S /Q >nul
exit /b
::*********************************************************************************
:Error
cls & Color 4C
echo(
echo The file "%Files_List2Upload%" dos not exist !
Pause>nul
exit /b
::*********************************************************************************
以下配置文件:
@Component
public class Chauffeur {
Car car;
public Chauffeur(Car car){
this.car = car;
}
public void go(){
System.out.println("Chauffeur");
car.drive();
}
}
@Component
public class Car{
public void drive() {
System.out.println("Drive car");
}
}
以及以下测试:
@Configuration
@ComponentScan
public class DriveableConfiguration {
}
上面的所有类都在同一个包中,测试正在通过。
在测试中,我使用@Autowired注释了@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=DriveableConfiguration.class)
public class DriveableTest {
@Autowired
Chauffeur chauffeur;
@Test
public void chauffeurTest(){
chauffeur.go();
}
}
,这意味着Spring容器会在没有开发人员需要显式实例化它的情况下创建Chauffeur实例。
现在,Chauffer的构造函数需要Car的实例,因此该类没有默认构造函数。尽管如此,容器会创建它,在构造函数中注入所需的实例。
@Autowired对容器的说法是用它可以提供的任何(组件,豆)实例化元素,构造函数中包含的参数是什么?如果是这样,在什么情况下需要使用@Autowired来注释构造函数?
答案 0 :(得分:1)
仅在您使用Spring 4.3+
时。在这种情况下,如果你有一个非默认构造函数,构造函数上的@Autowired
是可选的。
您可以查看示例here。
从4.3开始,您不再需要在这样的单构造函数场景中指定显式注入注释。对于那些根本不带任何容器注释的类来说,这是特别优雅的,例如在以编程方式注册时
对于低于4.3的版本,您将抛出异常:
容器将抛出异常以查找默认值 构造函数,除非您明确指出autowire模式 bean定义设置中的“构造函数”(例如,在XML中)